使いそうな関数のリファレンス
英語リファレンスをそれっぽく訳してみました。間違ってたらごめにょ
かなり雑です。参考程度にお願いします。
| 関数名 | 内容 |
|---|---|
| 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でエラーコードを取得することが出来る。