socket
更新日2006年11月09日
参照 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/socket_2.asp

機能
そのsocket関数は指定の転送サービスプロバイダに制限されたソケットを作成します。

書式
SOCKET WSAAPI socket(
  int af,
  int type,
  int protocol
);
引数
af [入] アドレスファミリィ仕様。 アドレスファミリィのために可能な値は、Winsock2.hヘッダファイルにて定義されています。

Windows SDK上にてWindows Vista以降のためにリリースされた、 ヘッダファイルの編成は変更されました、そして、そのアドレスファミリィのために可能な値はWs2def.hヘッダファイルにて定義されています。 そのWs2def.hヘッダファイルはWinsock2.hにて自動的にインクルードされる事に注意しましょう、 そして、直接使用してはいけません。

現在サポートされて値はAF_INETまたはAF_INET6です、 そしてそれはIPv4とIPv6のためのインターネットアドレスファミリィフォーマットです。 もし、そのアドレスファミリィ用にウィンドウズ・ソケッツ・サービスプロバイダがインストール済みならば、アドレスファミリィのための他のオプション(NetBIOS用のAF_NETBIOS、たとえば)はサポートされます。 AF_ アドレスファミリィ値と PF_ プロトコルファミリィ定数値は同一である事に注意(たとえば、AF_INET と PF_INET)、 それで、どちらの定数でも使用可能です。

他に多くの値が使用可能ではありますが、下の表にはアドレスファミリィ用の一般的な値をリストします。

Af 意味
AF_UNSPEC
0
そのアドレスファミリィは指定されていません。
AF_INET
2
そのインターネット・プロトコル・バージョン4(IPv4)アドレス・ファミリィ。
AF_NETBIOS
17
NetBIOSアドレスファミリィ。 もしNetBIOS用のウィンドウズ・ソケッツ・プロバイダがインストール済みであるならば、こちらのアドレスファミリィはサポートされるだけです。
AF_INET6
23
そのインターネット・プロトコル・バージョン6(IPv6)アドレスファミリィ。
AF_IRDA
26
そのインフラレッド・データ・アソシエーション(IrDA)アドレスファミリィ。 もしコンピュータが赤外線ポートとドライバをインストール済みならば、こちらのアドレスファミリィはサポートされるだけです。
AF_BTM
32
そのブルートゥース・アドレス・ファミリィ。 もしWindows Server 2003以降の上にBluetoothアダプタがインストール済みであるならば、こちらのアドレスファミリィはサポートされるだけです。
type [入] 新しいソケット用タイプ仕様。 ソケットタイプ用に可能な値はWinsock2.hヘッダファイルにて定義されています。

ウィンドウズ・ソケッツ2のためにサポートされている、typeパラメタ用に可能な値を以下のテーブルにリストします:

Type 意味
SOCK_STREAM
1
順次に提供します、信頼できる、双方向、 OOBデータ伝送メカニズム用のバイトストリームを接続ベースとします。 インターネット・アドレス・ファミリィ(AF_INET or AF_INET6)用に伝送制御手順(TCP)を使用する。
SOCK_DGRAM
2
テータグラムスをサポート、そしてそれはコネクションレスです、 確定した(典型的に小さい)最大長のバッファを信頼出来ません。 インターネット・アドレス・ファミリィ(AF_INET or AF_INET6)用に使用者データグラム方式(UDP)を使用する。
SOCK_RAW
3
次の上位プロトコルヘッダを操作するアプリケーションを可能にする低級ソケットを提供します。 IPv4ヘッダを操ります、ソケットにてIP_HDRINCLソケットオプションをセットしなければなりません。 IPv6ヘッダを操ります、ソケットにてIPV6_HDRINCLソケットオプションをセットしなければなりません。
SOCK_RDM
4
信頼できるメッセージデータグラムを提供します。 このタイプの例は、WindowsのPragmatic General Multicast(PGM)マルチキャストプロトコル実装です、 しばしば、信頼できるマルチキャストプログラミングと称されます。
SOCK_SEQPACKET
5
データグラム上にパケットベース擬似ストリームを提供します。

Windowsソケット2で、新しいソケットタイプが導入されました。 アプリケーションは、WSAEnumProtocolsによって各々の利用できるトランスポートプロトコルの属性を動的に発見する事が出来ます。 それで、アプリケーションはその可能なソケットタイプとアドレスファミリィ用プロトコルオプションを決定する事が出来ます、そして、こちらのパラメタを指定する時にこちらの情報を使います。 新しいソケットタイプ、アドレスファミリィ、そしてプロトコルが定められる様に、Winsock2.hWs2def.hヘッダファイルのソケットタイプ定義は定期的に更新されるでしょう。

ウィンドウズ・ソケッツ1.1の、可能なソケットタイプは、SOCK_DGRAM と SOCK_STREAMだけです。

protocol [入] 使用するプロトコル。 protocolパラメタのために可能なオプションは、指定されるアドレスファミリィとソケットタイプに特有です。 protocol用に可能な値は、Winsock2.hWsrm.hヘッダファイルにて定義されています。

Windows SDK 上にてWindows Vista 以降用にリリースされました、 ヘッダファイルの構成は変更されました、そして、こちらのパラメタは、Ws2def.hヘッダファイルにて定義されているIPPROTO列挙タイプより値のうちの1つである事が出来ます。 Ws2def.hWinsock2.h内にて自動的にインクルードされる事に注意、 そして、直接決して使われてはなりません。

もし0の値が指令されるならば、 発信者はプロトコルを指定したくはありません、そして、サービスプロバイダは使うプロトコルを選びます。 呼び出し者はプロトコルを指定したくはありません、 そして、サービスプロバイダは使用するprotocolを選択するでしょう。

af パラメタがAF_INET or AF_INET6 and type が SOCK_RAW である時、 protocol用に指定される値は、IPv6 または IPv4 パケットヘッダのプロトコルフィールドにてセットされます。

他に多くの値が可能ではありますが、protocol のための一般の値を下の表にリストします。

protocol 意味
IPPROTO_TCP
6
トランスミッション・コントロール・プロトコル(TCP)。 af パラメタが AF_INET or AF_INET6 そして type パラメタが SOCK_STREAM である時に、こちらは可能な値です。
IPPROTO_UDP
17
ユーザ・データグラム・プロトコル(UDP)。 af パラメタが AF_INET or AF_INET6 そして type パラメタが SOCK_DGRAM である時に、こちらは可能な値です。
IPPROTO_RM
113
信頼できるマルチキャストのためのPGMプロトコル。 af パラメタが AF_INET そして type パラメタが SOCK_RDM である時に、こちらは可能な値です。 Windows SDK上にてWindows Vista用にリリースされました、 この値は、IPPROTO_PGMとも呼ばれています。
戻り値
もしエラーが発生しないならば、 socketは、新しいソケットへの参照をしている詳細を戻します。 さもなければ、 INVALID_SOCKETの値は戻されます、そして、特定のエラーコードはWSAGetLastError呼び出しによって検索される事が出来ます。

エラーコード 意味
WSANOTINITIALISED
こちらの関数を呼び出す前に、WSAStartup呼び出しが成功している必要があります。
WSAENETDOWN
ネットワークサブシステムまたは連合サービスプロバイダは、失敗しました。
WSAEAFNOSUPPORT
指定されたアドレスファミリィはサポートされていません。
WSAEINPROGRESS
Windows Sockets 1.1が呼び出しブロッキングは、進行中です、 または、サービスプロバイダはコールバック関数をまだ処理中です。
WSAEMFILE
どんなソケット記述も利用できません。
WSAENOBUFS
バッファスペースが利用できません。ソケットは作成される事が出来ません。
WSAEPROTONOSUPPORT
指定されたプロトコルはサポートされていません。
WSAEPROTOTYPE
指定されたプロトコルは、このソケットのための間違ったタイプです。
WSAESOCKTNOSUPPORT
指定されたソケットタイプはこちらのアドレスファミリィにおいてサポートされていません。

注釈

socket関数は、ソケット記述とどんな関連した資源でも割り当てられて、特定の転送サービスプロバイダと結びつく原因となります。 Winsockは、アドレスファミリィの要求された組合せをサポートする最初に利用できるサービスプロバイダを利用するでしょう、ソケットタイプとプトロコルパラメタ。 作成されるソケットはデフォルト属性で上書きされるでしょう。 Windowsのために、マイクロソフトに特有のソケットオプション、SO_OPENTYPE、 Mswsock.h内にて定義されていて、こちらのデフォルトに影響を及ぼす事が出来ます SO_OPENTYPEの詳細な説明のために、マイクロソフトに特有のドキュメンテーションを参照しましょう。

上書き属性を含まないソケットは、WSASocketを用いて、作成される事が出来ます もし上書きを指示するパラメタ値にNULLを指定するならば、上書きされたソケット上にて、上書き操作許可 (WSASend, WSARecv,WSASendTo, WSARecvFrom, and WSAIoctl) を行う全ての関数は上書きされない使用法をサポートします。

プロトコルとそのサポートされているサービスプロバイダを選択する時、こちらのプロシージャはベースプロトコルまたはプトロコルチェイン選択するだけでしょう、それ自体によるプロトコル層ではない。 解放されたプロトコル層は、type または af のどちらかの上にて部分的な一致を考慮されません。 つまり、もし適当なプロトコルが見つからなかったならば、それはWSAEAFNOSUPPORT または WSAEPROTONOSUPPORTのエラーコードへ先導しません。

ノート     そのマニフェスト定数AF_UNSPECはヘッダファイルにて定義され続けます 、しかし、その使用は強く阻止されます、 protocol パラメタの値を解釈する際に、こちらとしては曖昧な目的に出来ます。

SOCK_STREAMのような接続志向ソケットは、全二重接続を提供します、 そして、それの上でなにかデータが送信または受信出来る前に、stateに接続しなければなりません。 他のソケットへの接続は、connect 呼び出しと共に作成されます。 一旦接続されるならば、データは sendrecv 呼び出しを使用して転送される事が出来ます。 セッションが完了された時、closesocket は実行されなけれなりません。

信頼出来る実装をするのに用いられる通信プロトコル、 接続志向ソケットは、データが失われない、または複製されない事を確実にします。 もしピアプロトコルがバッファスペースを持っているデータが相当の時間以内に送信成功できないならば、 その接続は破壊されよく考えられます、そして、以降の呼び出しはエラーコードをWSAETIMEDOUTに設定して失敗します。

コネクションレス、メッセージ志向ソケットはsendtorecvfromを使っている任意の仲間へデータグラムの送信と受信を可能にします。 もしそのようなソケットが特定の仲間に接続しているならば、 データグラムはsendを使っている仲間送られる事が出来る、そして、こちらのrecvを使っている仲間からだけ受信される事が出来ます。

SOCK_RAWの type でソケットを受け取る時、IPv6とIPv4は異なる動きをします。 IPv4は、パケット積載量を含むパケットを受け取ります、 続く上位層ヘッダ(たとれば、TCPまたはUDPパケットのためのIPヘッダ)、 そして、IPv4パケットヘッダ。 IPv6は、パケットペイロードと続く上位層ヘッダを含むパケットを受信します。 IPv6は、IPv6パケットヘッダを決して含まないパケットを受信します。

ノート  Windows NT上での、ロウソケットサポートは、管理者権限を必要とします。

SOCK_SEQPACKETの type パラメータによるソケットは、データグラムに基づきます、 しかし、擬似ストリームプロトコルとしての関数。 両方の送受信パケットのために、別々のデータグラムが使われます。 しかし、Windows Socketsは、複数に合体することができます一つのパケットへのパケットを受ける。 そのように、アプリケーションは受信を発行出来ます、色々なcoealesced複数のパケットよりデータを一回の呼び出しで検索する(たとえば、recv または WSARecvEx)。 AF_NETBIOSアドレスファミリィはSOCK_SEQPACKETの type パラメタをサポートします。

af パラメタがTCP/IP上でのNetBIOSのためのAF_NETBIOSである時、 type パラメタはSOCK_DGRAM または SOCK_SEQPACKET である場合があります。 AF_NETBIOS アドレスファミリィのために、 protocol パラメタは負数として表されるLANアダプタ番号です。

Windows XP 以降での、 以下の命令は、サービスプロバイダのインストールを決定するためにWindows Socketsカタログをリストするのに用いられる事ができます、アドレスファミリィ、ソケットタイプ、そしてプロトコルはサポートされます。


netsh winsockカタログショー
タイプSOCK_RAWによるソケットのサポートは、必要ではありません、 しかし、実用向きであるように、サービスプロバイダはロウソケットをサポートするのを奨励されます。

IrDA ソケットのための注意

以下を憶えておいてください:

  • Af_irda.hヘッダファイルは、明示的にインクルードされなければなりません。
  • SOCK_STREAMだけはサポートされます;SOCK_DGRAMタイプは、IrDAによってサポートされません。
  • protocol パラメータは、IrDAのために0に常に設定されます。

要求環境
Client Requires Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
Server Requires Windows Server "Longhorn", Windows Server 2003, Windows 2000 Server, or Windows NT Server.
Header Declared in Winsock2.h.
Library Use libws2_32.a
DLL Requires Ws2_32.dll.

参照
accept
bind
connect
getsockname
getsockopt
ioctlsocket
IPPROTO_IP Socket Options
IPPROTO_IPV6 Socket Options
listen
recv
recvfrom
Reliable Multicast Programming
select
send
sendto
setsockopt
shutdown
Winsock Functions
Winsock Reference
WSASocket