目次 - SDL_net 3.0 - NET_CreateDatagramSocket

NET_CreateDatagramSocket

データクラムソケットを生成しバインドする

ヘッダ

SDL3_net/SDL_net.h

構文

NET_DatagramSocket * NET_CreateDatagramSocket(NET_Address *addr, Uint16 port, SDL_PropertiesID props);

引数

NET_Address *addr接続をlistenするローカルアドレス. NULLのとき全ての有効なローカルアドレスでlistenする
Uint16port接続をlistenするローカルアドレスのポート. 0のときシステムが決める
SDL_PropertiesIDprops新しいサーバのプロパティ. デフォルトのとき0

戻り値

(NET_DatagramSocket *) 新しいNET_DatagramSocketを戻す. エラーのときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる.

詳細

データグラムソケットはストリームソケットとは異なるルールに従う. これは信頼性の高いバイトストリームではなくパケットで, 1つのリモートシステムとの通信以外も行え, 切断の可能性のある単一の「接続」の維持が存在しない. そのため, 使い方は複雑になるがネットワークの障害に対応しやすい. アプリケーションにとってどちらが良いかは, 完全にアプリケーションの目的による.

データグラムソケットの考え方は, 送信データを1つのチャンク(「パケット」)として相手のアドレスに1つずつ送り, 受信側は, 後で送ったパケットを先に到着することや全く到着しないこともありデフォルトではそれがいつ起こったかを知る方法もないが, 到着したのを受信するというものである.

この関数は新しいデータグラムソケットを生成する.

システムは即座にソケットを生成できるか否かを判別できるため, この関数はブロックせず, また非同期処理も行わない. この関数が成功を戻した場合, すぐにネットワークとの通信を開始することができる.

接続をlistenするアドレスを指定することができる. このアドレスはシステムのローカルアドレスである必要があり, 恐らくNET_GetLocalAddresses()が戻したアドレスの1つだが, ほとんどの場合はアプリケーションが有効なアドレスでlistenするために単にNULLを指定すればよい.

特定のポートにバインドする必要がある場合(サーバのように), portを指定する必要がある. データグラムサーバは必ずこれを行い, 既知のポートに到着できるようにしなければならない. 単に通信を開始したい場合(クライアントのように), 0を指定してシステムに未使用のポートを選択させる必要がある. あるポートに一度にバインドできるのは1つのアプリケーションのみのため, サーバのような動作を行わないならば, 0を選択すべきである. データグラムソケットは個別のパケットをそれぞれのポートにも送ることができるため, これはソケットのデータがどのポートに届くかの選択をするだけである.

データグラムソケットは(UDPより上の)特定のプロトコルを使用していないため, SDL_netを使用していないアプリケーションとも通信できるが, WebRTCのような任意のバイトパケット以上のプロトコルで対話したい場合はデータグラムソケットの上に自分自身で実装しなければならない.

BSDソケットやWinSockとは異なり, ポートは通常の整数で指定する. ライブラリがアプリケーションの代わりに処理するため, バイト交換で「ネットワーク順」にする必要はない.

呼び出し側はプロパティで動作をカスタマイズできる. これは任意で, propsを0にすると全てのプロパティをデフォルトにできる.

これらのプロパティに対応している:

スレッドセーフ

この関数はどのスレッドからも安全に呼べる.

バージョン

SDL_net 3.0.0以降

関連項目

SDL Wikiへのリンク

SDL3_net/NET_CreateDatagramSocket