次の方法で共有


インクルード ファイル

Windows Sockets 1.1 と共に使用するための当初のインクルード ファイルは Winsock.h ヘッダー ファイルでした。 Berkeley UNIX ソケットに基づく既存のソース コードを Windows ソケットに移植しやすくするため、Winsock 1.1 向けの Windows Sockets 開発キットは、標準の UNIX インクルード ファイル (sys/socket.h ヘッダー ファイルや arpa/inet.h ヘッダー ファイルなど) と同じ名前のいくつかのインクルード ファイルと共に提供することが推奨されていました。 ただし、これらの同じ名前の Winsock ヘッダー ファイルには、Winsock2.h ヘッダー ファイルを含めるためのディレクティブが含まれているだけでした。

Windows Sockets 2 がリリースされたとき、Windows ソケットと共に使用するプライマリ インクルード ファイルの名前が Winsock2.h に変更されました。 Winsock 1.1 用の古い最初の Winsock.h ヘッダー ファイルも古いアプリケーションとの互換性のために保持されました。 Winsock 1.1 互換アプリケーションの開発は、Windows 2000 のリリース以降、非推奨となっています。 現在、すべてのアプリケーションで Winsock アプリケーション ソース ファイルのインクルード Winsock2.h ディレクティブを使用する必要があります。

Winsock2.h ヘッダー ファイルには、ほとんどの Winsock 関数、構造体、定義が含まれています。 Ws2tcpip.h ヘッダー ファイルには、IP アドレスの取得に使用される最新の関数と構造体が含まれる TCP/IP 向け WinSock 2 のプロトコル固有の付属書で導入された定義が含まれています。 これには、IPv4 アドレスと IPv6 アドレスの両方の名前を解決する関数ファミリである getaddrinfogetnameinfo が含まれています。 Ws2tcpip.h ヘッダー ファイルは、これらの IP 非依存の名前付け関数がアプリケーションによって要求される場合にのみ必要となります。

Mswsock.h ヘッダー ファイルには、Windows Sockets 2 の Microsoft 固有機能拡張 (TransmitFileAcceptExConnectEx など) が含まれています。 Mswsock.h ヘッダー ファイルは通常、これらの Microsoft 固有機能拡張がアプリケーションによって使用されない限り、必要ありません。

Winsock2.h ヘッダー ファイルには Windows.h ヘッダー ファイルのコア要素が内部的に含まれているため、Winsock アプリケーションには通常、Windows.h ヘッダー ファイルの #include 行はありません。 Windows.h ヘッダー ファイルに #include 行が必要な場合、その前に #define WIN32_LEAN_AND_MEAN マクロを付ける必要があります。 歴史的な理由から、Windows.h ヘッダーには既定で Windows ソケット 1.1 用の Winsock.h ヘッダー ファイルが含まれます。 Winsock.h ヘッダー ファイル内の宣言は、Windows Sockets 2 で必要とされる Winsock2.h ヘッダー ファイルの宣言と競合します。 WIN32_LEAN_AND_MEAN マクロを使用すると、Windows.h ヘッダーによって Winsock.h が含まれることが防止されます。 これを次の図で示します。

#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>

#pragma comment(lib, "Ws2_32.lib")

int main() {
  return 0;
}

基本的 Winsock アプリケーションの作成

Winsock の概要

ソケット アプリケーションを Winsock に移植

Winsock プログラミングの考慮事項