目次 - 3.関数 - 3.4UDPソケット - SDLNet_UDP_Open

SDLNet_UDP_Open

UDPsocket SDLNet_UDP_Open(Uint16 port)

port
UDPパケットを受信するポート番号 (ネイティブのバイト順). ほとんどのサーバは使うポート番号がわかっているので, クライアントは簡単にサーバと通信できる. この値を0にすると, 使われていない不特定の番号を開くことができる. これはほとんどの場合UDPパケットをここから送信するために使う.

UDPパケットの送信かつ/または受信のためにソケットを開く. portが0でなければその番号が使われ, 0のとき自動的に付けられたポート番号を開く. TCPソケットとは違い, このソケットは接続にリモートホストのIPを必要としない. UDPポートはTCPポートとは違い, 実際には接続しないためである. このソケットは, 単に生成すればその後は直接送受信できるようになる.

戻り値: 成功のとき利用可能なUDPsocket. ソケットを生成できない, またはportが0でないとき要求したポートを割り当てられないなど失敗のときNULL

サーバだけでなくクライアントも特定のポートを開くことができる. しかし, 指定のポートはサーバなどの他のプロセスが既に使っていることがある. そのような場合はソケットを開けない. そしてプログラムはどうすることもできなくなるだろう. よって, ポート番号として0を渡して, 空いた番号を使うほうがよい. そうすればクライアントは常にポートを使える. クライアントはサーバに返すポートを知らせることができ, サーバはどこに返すかを知るためには単に受け取ったパケットを見ればよい.

サンプルコード

// ポート6666のUDPsocketを生成する (サーバ)
UDPsocket udpsock;

udpsock=SDLNet_UDP_Open(6666);
if(!udpsock) {
    printf("SDLNet_UDP_Open: %s\n", SDLNet_GetError());
    exit(2);
}

// 不特定のポートのUDPsocketを生成する (クライアント)
UDPsocket udpsock;

udpsock=SDLNet_UDP_Open(0);
if(!udpsock) {
    printf("SDLNet_UDP_Open: %s\n", SDLNet_GetError());
    exit(2);
}

参照

SDLNet_UDP_Close, UDPsocket

原文へのリンク

3.4.1 SDLNet_UDP_Open