web-dev-qa-db-ja.com

MinGWのソケット

私は、MinGWを使用してMSYSでnetcatを構築しようとしていましたが、MinGWがBSDソケットのすべてを実際にWindowsに移植していないことに気づきました(例:sys/socket.h)。 MinGWでWindowsソケットを使用できることは知っていますが、なぜBSDソケットのWindowsポートを作成しなかったのですか?この問題を回避するために#ifdefを使用しているプログラムがかなりあることに気付きました。代わりに使用できるBSDソケットのWindowsポートはどこにありますか?

MSYSでnetcatのmakeを実行するときのエラーは次のとおりです。


gcc -DLOCALEDIR=\"\/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -Wall -c `test -f 'core.c' || echo './'`core.c
In file included from core.c:29:
netcat.h:38:24: sys/socket.h: No such file or directory
netcat.h:39:63: sys/uio.h: No such file or directory
netcat.h:41:24: netinet/in.h: No such file or directory
netcat.h:42:55: arpa/inet.h: No such file or directory

MinGWには#ifdefはありません。エラーなしですべてをコンパイルするためにMSYSに追加できるライブラリ/パッケージはありますか?

注:netcat here をダウンロードしてCVSリポジトリを参照 here

23
User1

BSD sys/socket.h はPOSIXヘッダーであり、win32 APIはこれをサポートしていません。 MinGWヘッダーはネイティブのwin32ヘッダーの再実装にすぎず、追加のPOSIX互換性を提供していません。

Sys/socket.hサポートを探している場合は、GNU gnulibの sys/socket.hの置換 を試すか、または Cygwin を使用してください。これは、WindowsでPOSIX互換ラッパーを提供します。

25
kalev

WinSockおよびWinSock2には、BSDソケットとは異なる関数名があります。クロスプラットフォームアプリケーションを作成したい場合は、Microsoftを満足させるためのコードがたくさんあります。

MinWinに含まれている特別な「socket.h」および「socket.c」ファイルがあり、それぞれのWinSock2カウンターパートを呼び出すことによって単にデータを変換する場合は、はるかに簡単です。

Cプログラミングを始めたばかりなので、自分ではできませんが、今まで誰もやったことがないようです。

7

別の回答からのこれらのコメントは、Windowsでmingwを使用してコンパイルする簡単なbsdソケットコードを取得するために必要な回答として機能しました。

これらすべてのインクルードを#includeで置き換えます。これはwinsockの同等のヘッダーになるため、何が起こるかを確認してください。

また、ws2_32に対してリンクし、WSAStartup/WSACleanupを使用する必要があります。これはあなたを元気にさせるかもしれません。

編集:closeshutdown/closesocketに置き換え、writesendに置き換える必要もありました。コードは正常にコンパイルされましたが、実際にはこれらの追加の変更なしでは機能しませんでした。

4
davenpcj

Stackoverflowリンクを参照してください。 「sys/socket.h」ヘッダー/ソースファイルはどこで取得できますか?

答え/解決策はより明確です。

3
jlguenego

MingWinはミニマリストであり、それはそれの最も重要な側面です。理解しやすくなるため、最終的にはアプリケーションを作成するのは開発者の責任です。 MingWinは物事を簡単にするだけですが、NixアプリをWindowsに変換する魔法はありません。

3
user237890

ChrisWが言ったように、Winsock2はBSDソケットのポートです。 BSDソケットとは異なるwinsockのどの部分を使用しようとしていますか? (WSAStartupおよびWSACleanup以外)

2
Andrew Keith

エラーなしですべてをコンパイルするためにMSYSに追加できるライブラリ/パッケージはありますか?

MSYSはCygwinのフォークです。 Cygwinと同様にBSDソケットAPIを提供します。 MSYSを使用している場合は、次のようにコードをコンパイルできます。

gcc -c -o test.o test.c -I/include

-I/includeは、コンパイラにMSYSインクルードディレクトリを検索させるために必要です。

そして、このようにリンクします:

gcc -o test.exe test.o /bin/msys-1.0.dll
2
Oktalist