使いそうな関数のリファレンス
英語リファレンスをそれっぽく訳してみました。間違ってたらごめにょ
かなり雑です。参考程度にお願いします。
関数名 | 内容 |
---|---|
WSAStartup | Winsockの初期化を行う |
WSACleanup | Winsockの使用を終了する |
socket | ソケットを作成する |
closesocket | ソケットを開放する |
shutdown | 片方向、又は両方向の接続を無効化する |
bind | ローカルアドレスをソケットに関連付ける |
connect | ソケットを接続する |
listen | ソケットの待ちうけを行う |
accept | ソケットの接続を受け入れる |
send | データを送信する |
recv | データを受信する |
htons | ネットワークバイトオーダーに変換する |
ntohs | ホストバイトオーダーに変換する |
gethostbyaddr | アドレスからホスト情報を得る |
gethostbyname | ホスト名からホスト情報を得る |
getsockopt | ソケットオプションを取得する |
setsockopt | ソケットオプションを設定する |
WSACreateEvent | ネットワークイベントを作成する |
WSACloseEvent | ネットワークイベントを開放する |
WSAEventSelect | イベントをソケットに結びつける |
WSAWaitForMultipleEvents | 複数のネットワークイベントを待つ |
WSAEnumNetworkEvents | ソケットに発生したイベントを列挙する |
int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); Winsockの初期化を行う。実行した回数だけWSACleanupを実行する必要がある。 Parameters wVersionRequested [in] 使用するWinsockのバージョン。上位バイトにはマイナーバージョン、 下位バイトにはメジャーバージョンを入れる。 lpWSAData [out] WSADATA構造体のポインタを渡す。Winsockの詳細を受け取る。 Return Values 成功すれば0、失敗すれば以下のエラーコードの一つを返す。 Error Code WSASYSNOTREADY :ネットワークシステムの準備が出来ていません。 WSAVERNOTSUPPORTED:このバージョンのソケットがサポートされていません。 WSAEINPROGRESS :ブロッキング処理中です。 WSAEPROCLIM :タスクの限界に達しました。 WSAEFAULT :WSADATAのポインタが不正です。
typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; } WSADATA, *LPWSADATA; WSAStartupに渡し、情報を受け取る構造体。 Members wVersion Winsockのライブラリのバージョン wHighVersion 使用可能な最高のバージョン。通常これはwVersionと同じである。 szDescription ライブラリの情報を表す文字列 szSystemStatus 状態、または構成情報を表す文字列 iMaxSockets 互換性のために残されている。Winsock2ではこの情報を無視すべき。 iMaxUdpDg 互換性のために残されている。getsockoptを使用すべき。 lpVendorInfo 互換性のために残されている。ベンダー情報にアクセスするにはgetsockoptを使用すべき Note. wVersionの値が2以上ならiMaxsockets、iMaxUdpDg、lpVendorInfoメンバーを無視するべきである。
int WSACleanup (void); Winsockの使用を終える。 Return Values 成功すれば0、失敗すればSOCKET_ERRORを返す。 WSAGetLastErrorを呼び出すことによってエラー情報を受け取ることが出来る。
SOCKET socket( int af, int type, int protocol ); ソケットを作成します。 Parameters af [in] アドレスファミリを指定。通常AF_INETを使用する。 type [in] 新しいソケットの種類を指定する。Winsock1.1のために用意されたものは↓の二つである。 SOCK_STREAM:TCPを使用する。 SOCK_DGRAM :UDPを使用する。 Winsock2では、多くの新しいソケットタイプが導入されている。 protocol [in] プロトコルで使用される。アドレスファミリに従う。0でいいっぽい? Return Values 成功すれば新しいソケットディスクリプタを返す。そうでなければINVALID_SOCKETが返る。 WSAGetLastErrorでエラーコードを取得することが出来る。
int closesocket( SOCKET s ); ソケットを閉じる。 Parameters s [in] ソケット Return Values 成功すると0、失敗するとSOCKET_ERRORを返す。 WSAGetLastErrorでエラー情報を受け取ることが出来る。
int shutdown( SOCKET s, int how ); ソケットの送受信を無効にする。 Parameters s [in] ソケット how [in] どのタイプの操作を無効にするか SD_RECIEVE 受信を無効にする。 SD_SEND 送信を無効にする。 SD_BOTH 両方 Return Values 成功すると0、失敗するとSOCKET_ERRORを返す。 WSAGetLastErrorでエラー情報を受け取ることが出来る。 Note closesocketを呼び出す前にshutdownすべき。
int bind( SOCKET s, const struct sockaddr FAR *name, int namelen ); ローカルアドレスをソケットに関連付ける。 Parameters s [in] 関連付けるソケットを指定する name [in] ソケットに割り当てるアドレスを表すSOCKADDR構造体のポインタ namelen [in] nameの長さ Return Values 成功すれば0、そうでなければSOCKET_ERRORを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
int connect( SOCKET s, const struct sockaddr FAR *name, int namelen ); 指定されたソケットを接続する。 Parameters s [in] 接続されていないソケットを指定する。 name [in] 接続情報 namelen [in] nameの長さ Return Values 成功すれば0、失敗すればSOCKET_ERRORを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
int listen( SOCKET s, int backlog ); 接続要求を待ち受けます。 Parameters s [in] 接続されていないソケットを指定 backlog [in] 接続待ち行列の長さ。SOMAXCONNに設定されると、適正な最大サイズが指定される。 Return Values 成功すれば0、そうでなければSOCKET_ERRORを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
SOCKET accept( SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen ); 接続要求を受け入れる。 Parameters s [in] listen関数を実行しているものと同じソケットを指定する。 addr [out] 接続情報を受け取るバッファへのポインタ addrlen [out] バッファのサイズ Return Values 成功すれば接続された新しいソケットを返す。失敗するとINVALID_SOCKETを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
struct sockaddr { u_short sa_family; char sa_data[14]; }; 選択されたプロトコルによってsockaddr構造体は異なる。 sa_familyパラメータを除いてネットワークバイトオーダーで表される。 Winsock2では厳密にsockaddr構造体に解釈されない。 これは互換性のためにこのように表されている。 実際はアドレスファミリによって異なって解釈され、唯一sa_familyだけは 全てにおいてアドレスファミリであると解釈される。 以下の構造体はTCP/IPにおいて使用される。 struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; };
int send(SOCKET s, const char FAR *buf, int len, int flags ); 接続されたソケットにデータを送信する。 Parameters s [in] 接続されたソケット buf [in] 送信するデータのバッファ len [in] バッファの長さ flags [in] 送信フラグ。以下のフラグをOR演算子で使用できる MSG_DONTROUTE:ルーティングすべきではないと指示する。これはサービスによって無視されることがある MSG_OOB :OOBデータを送信する Return Values 成功すると送信したバイト数を返す。そうでなければSOCKET_ERRORを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
int recv( SOCKET s, char FAR *buf, int len, int flags ); 接続されたソケットからデータを受信する。 Parameters s [in] 接続されたソケット buf [in] 受信するデータのバッファ len [in] バッファの長さ flags [in] 送信フラグ。以下のフラグをOR演算子で使用できる MSG_DONTROUTE:ルーティングすべきではないと指示する。これはサービスによって無視されることがある MSG_OOB :OOBデータを送信する Return Values 成功すると受信したバイト数を返す。そうでなければSOCKET_ERRORを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
u_short htons( u_short hostshort ); u_short値をホストバイトオーダーからTCP/IPネットワークバイトオーダーに変換する (ビッグエンディアン値に) Parameters hostshort [in] 16bitのホストバイトオーダー値を指定する ReturnValues TCP/IPネットワークバイトオーダー値を返す
u_short ntohs( u_short netshort ); u_short値をTCP/IPネットワークバイトオーダーからホストバイトオーダーに変換する (IntelCPUならリトルエンディアンに) Parameters netshort [in] 16bitのTCP/IPネットワークバイトオーダー値を指定する ReturnValues ホストバイトオーダー値を返す
struct HOSTENT FAR * gethostbyaddr( const char FAR *addr, int len, int type ); ネットワークアドレスから対応するホスト情報を得る。 Parameters addr [in] ネットワークバイトオーダーの値へのポインタ len [in] アドレス長 type [in] AF_INETアドレスファミリタイプのようなアドレスの種類。(TCP,UDPや他のインターネットプロトコル によって定義さている。)アドレスファミリタイプやそれらに準じる値はwinsock2.hにて定義されている。 ReturnValues エラーが発生しなければHOSTENT構造体のポインタを返し、そうでなければ0を返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
struct hostent FAR *gethostbyname( const char FAR *name ); ホスト名に対応するホスト情報をネットワークデータベースから得る。 Parameters name [in] 解決するためのnullで終わるホスト名 ReturnValues エラーが発生しなければHOSTENT構造体のポインタを返し、そうでなければ0を返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
int getsockopt( SOCKET s, int level, int optname, char FAR *optval, int FAR *optlen ); int setsockopt( SOCKET s, int level, int optname, const char FAR *optval, int optlen ); ソケットオプションを取得/設定する。 Parameters s [in] ソケットを指定する。 level [in] サポートしているレベルはSOL_SOCKETとIPPROTO_TCPを含んでいる。 optname [in] 取得/設定されるオプション optval [in] 要求されたオプションのためのバッファ。 optlen [in] optvalのバッファサイズ Remarks TCP/IPオプションはソケットをbindした後でチェックすること。 サポートされているオプション level=SOL_SOCKET Get/Set ↓ 値 種類 意味 G SO_ACCEPTCONN BOOL ソケットがlisten中であるか G/S SO_BROADCAST BOOL ソケットがbloadcast messageの伝達のために構成されているか G/S SO_CONDITIONAL_ACCEPT BOOL 現在のソケットがシステムデフォルトかを返す? G/S SO_DEBUG BOOL デバッグが可能か G/S SO_DONTLINGER BOOL TRUEであるならSO_LINEARオプションは無効である G/S SO_DONTROUTE BOOL ルーティングが無効、ATMソケットにサポートされない G SO_ERROR int エラーを検索し、クリアします G SO_GROUP_ID GROUP 予約済み G/S SO_GROUP_PRIORITY int 予約済み G/S SO_KEEPALIVE BOOL Keep-alivesを送る。ATMソケットにサポートされない G/S SO_LINGER LINGER structure 現在のlinger optionsを返します G SO_MAX_MSG_SIZE unsigned int SOCK_DGRAMのようなメッセージ指向ソケットの最大メッセージ数、 ストリーム指向ソケットでは無効 G/S SO_OOBINLINE BOOL 通常のデータ・ストリームでOOBデータを受け取る。 G SO_PROTOCOL_INFO WSAPROTOCOL_INFO プロトコル情報の記述 G/S SO_RCVBUF int 受信バッファのサイズ G/S SO_REUSEADDR BOOL すでに使用中のアドレスにソケットを結びつけることが出来る。 G/S SO_SNDBUF int 送信バッファのサイズ G SO_TYPE int ソケットタイプ(例えばSOCK_STREAM) S SO_EXCLUSIVEADDRUSE BOOL ソケットを排他アクセスにする。NT4.0,SP4か2000以上が必要 G/S PVD_CONFIG Service Provider サービスプロバイダ特有のデータ Dependent level = IPPROTO_TCP G/S TCP_NODELAY BOOL Nagleアルゴリズムを無効にする。 level = NSPROTO_IPX Windows2000、NTは全てのオプションをサポートするが、 Windows95,98はIPX_PTYPE,IPX_FILTERPTYPE,IPX_DSTYPE,IPX_RECVHDR,IPX_MAXSIZE,IPX_ADDRESSだけをサポートする G/S IPX_PTYPE int IPXパケットタイプを取得/設定する G/S IPX_FILTERPTYPE int フィルタパケットタイプを取得/設定する S IPX_STOPFILTERPTYPE int フィルタタイプがIPX_FILTERTYPEと共にフィルタリングされるのを停止する G/S IPX_DSTYPE int あらゆるパケットのSPXヘッダを取得/設定する G/S IPX_EXTENDED_ADDRESS BOOL 拡張アドレシングが可能か G/S IPX_RECVHDR BOOL ヘッダーがすべて送られるか否かに関係なく、ヘッダーを受ける? G IPX_MAXSIZE int 送ることができる最大のデータサイズ G IPX_ADDRESS IPX_ADDRESS_DATA IPXが制限されている特定のアダプターに関する情報 structure G IPX_GETNETINFO IPX_NETNUM_DATA 特定のIPXネットワーク番号に関する情報 structure G IPX_GETNETINFO_NORIP IPX_NETNUM_DATA 特定のIPXネットワーク番号に関する情報、RIPを使用しない。 structure G IPX_SPXGETCONNECTIONSTATUS IPX_SPXCONNSTATUS_DATA 接続SPXソケットに関する情報 structure G IPX_ADDRESS_NOTIFY IPX_ADDRESS_DATA IPXが制限されているアダプター上で変化が起こると通知を得る。 structure G IPX_MAX_ADAPTER_NUM int アダプターの最大数。0ベース G IPX_RERIPNETNUMBER IPX_NETNUM_DATA 類似したIPX_GETNETINFOがあってもローカルキャッシュがあっても structure 強制的にRIPを使うためのIPX? S IPX_RECEIVE_BROADCAST BOOL ブロードキャストパケットがソケットでありうることを示す デフォルトでTRUEに設定する。ブロードキャストを使用しない場合 FALSEに設定すべき。 G/S IPX_IMMEDIATESPXACK BOOL ACKを送る前にSPX接続を遅らせないよう指示する。 前後方向の負荷のないアプリケーションはTRUEに設定すべき
WSAEVENT WSACreateEvent (void); 新しいイベントオブジェクトを作成する。 Return Values 成功すればイベントオブジェクトのハンドルを返す。そうでなければWSA_INVALID_EVENTを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
BOOL WSACloseEvent( WSAEVENT hEvent ); イベントハンドルをクローズする。 Return Values 成功すればTRUEを返す。失敗するとFALSEを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。
int WSAEventSelect( SOCKET s, WSAEVENT hEventObject, long lNetworkEvents ); 指定されたソケットにFD_xxxネットワークイベントとイベントオブジェクトを関連付ける Parameters s [in] ソケット hEventObject [in] 関連付けるイベントオブジェクト lNetworkEvents [in] ネットワークイベントのイベントマスクの組み合わせ 指定できるイベント Event 最可能にする関数 FD_READ recv, recvfrom, WSARecv, or WSARecvFrom. FD_WRITE send, sendto, WSASend, or WSASendTo. FD_OOB recv, recvfrom, WSARecv, or WSARecvFrom. FD_ACCEPT accept or WSAAccept がWSATRY_AGAINエラーを出さなかったときに、 状態関数がCF_DEFERを返したのを示す FD_CONNECT None.. FD_CLOSE None. FD_QOS WSAIoctlをSIO_GET_QOSと共に呼び出したとき FD_GROUP_QOS Reserved. FD_ROUTING_INTERFACE_CHANGE WSAIoctlをSIO_ROUTING_INTERFACE_CHANGEと共に呼び出したとき FD_ADDRESS_LIST_CHANGE WSAIoctlをSIO_ADDRESS_LIST_CHANGEと共に呼び出したとき Return Values 成功すれば0、失敗すればSOCKET_ERRORを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。 Remarks WSAEventSelectはソケットを自動的に非ブロッキングモードにする。
DWORD WSAWaitForMultipleEvents( DWORD cEvents, const WSAEVENT FAR *lphEvents, BOOL fWaitAll, DWORD dwTimeout, BOOL fAlertable ); Parameters cEvents [in] イベントオブジェクトの数。1以上WSA_MAXIMUM_WAIT_EVENTS以下で指定する。 lphEvents [in] イベントオブジェクトハンドルの配列のポインタ fWaitAll [in] TRUEなら全てのイベントがシグナル状態になったときに戻る。FALSEならどれか一つがシグナルのときに戻る。 dwTimeout [in] タイムアウト時間をミリ秒単位で指定する fAlertable [in] 関数から戻るときに、TRUEならI/O完了ルーチンが実行される。FALSEなら実行されない。 Return Values 成功すれば、原因を表すイベントオブジェクト返す。失敗するとWSA_WAIT_FAILEDを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。 成功時の戻り値は以下のうちの一つである。 WSA_WAIT_EVENT_0 to fWaitAllがTRUEならば全てのイベントがシグナルになったことを表す。 (WSA_WAIT_EVENT_0 + cEvents - 1) FALSEならばWSA_WAIT_EVENT_0を引いた戻り値はシグナル状態になった イベントハンドルのインデックスを表す WAIT_IO_COMPLETION 一つ以上のI/O完了ルーチンが実行のためにキューに詰まれた WSA_WAIT_TIMEOUT タイムアウトが発生した。
int WSAEnumNetworkEvents( SOCKET s, WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEvents ); ソケットに発生したイベントの発見、イベントのクリア、任意でイベントオブジェクトのリセットを行う Parameters s [in] 調査するソケット hEventObject [in] (オプション)リセットされる任意の関連イベントハンドル。 lpNetworkEvents [out] 発生したネットワークイベントを受け取るWSANETWORKEVENTS構造体のポインタ Return Values 成功すれば0、そうでなければSOCKET_ERRORを返す。 WSAGetLastErrorでエラーコードを取得することが出来る。