web-dev-qa-db-ja.com

<winsock.h>と<winsock2.h>に違いはありますか?

MySQLCライブラリで必要なものを含めています。

VS2010のオートコンプリートも表示されています-これが何であるかについて何か考えはありますか?

それらは交換可能ですか、そして一方が他方よりも優れている点はありますか?

ありがとう!

17
James

@costの答え links とりわけ、答えられなかったこの質問をする議論へ:

Winsock2.hの前にwindows.hを含めることができない理由はありますか?それは私にたくさんのエラーを与えます、しかし私がそれらの順序を切り替えるとすべてが大丈夫です...それはなぜですか?

windows.hには、新しいWindowsバージョン用にコンパイルする場合はwinsock2.hが含まれますが、古い開発の場合は、代わりにwinsock.hが含まれます。ただし、問題はwindows.hだけに限定されません。 winsock.hwinsock2.hの前に含まれると、コンパイラエラーが発生します。その理由は、2つのファイルDO NOTが非常にうまく共存しているためです。 winsock2.hは、replacewinsock.hであり、拡張しないように設計されています。 winsock.hで定義されているものはすべて、winsock2.hでも定義されています。 winsock2.hwinsock.hの前に含まれている場合、winsock2.h_WINSOCKAPI_を定義して、コンパイラが後続のwinsock.hインクルードを処理しないようにします。すべて問題ありません。ただし、winsock.hwinsock2.hの前に含まれている場合、winsock2.hはそれを検出せず、winsock.hがすでに定義しているすべてを再定義しようとするため、コンパイルが失敗します。

同じプロジェクトでwinsock.hを使用するコードとwinsock2.hを使用するコードを混在させる場合は十分に注意する必要があります。たとえば、winsock2.hを使用する独自のソケットコードを記述し、winsock.hを引き続き使用するサードパーティライブラリを使用する場合です。

26
Remy Lebeau

Winsock 1.1を使用する場合を除いて、winsock2.hを使用する必要があります。 winsock2.hはWinsock2用です。

詳細については、 Wikipedia Winsockページ を参照してください。

7
Seth Carnegie