NET_Server * NET_CreateServer(NET_Address *addr, Uint16 port, SDL_PropertiesID props);
| NET_Address * | addr | 接続をlistenするローカルアドレス. NULLも可 |
| Uint16 | port | 接続をlistenするローカルアドレスのポート |
| SDL_PropertiesID | props | 新しいサーバのプロパティ. デフォルトのとき0 |
リモートシステムに接続する準備を行った側を「クライアント」と呼び, 接続先を「サーバ」と呼ぶ.
サーバはlistenし, クライアントからの接続をacceptする. それによりサーバ側に新しいストリームパケットが生成され, データの送受信が可能になる.
この関数は別のシステムから接続をacceptするサーバを生成する.
システムは即座にサーバを生成できるか否かを判別できるため, この関数はブロックせず, また非同期処理も行わない. この関数が成功を戻した場合, すぐに接続を待つことができる.
接続をlistenするアドレスを指定することができる. このアドレスはシステムのローカルアドレスである必要があり, 恐らくNET_GetLocalAddresses()が戻したアドレスの1つだが, ほとんどの場合はアプリケーションが有効なアドレスでlistenするために単にNULLを指定すればよい.
サーバを生成した後は, NET_AcceptClient()で接続に来たクライアントと交信するためのストリームソケットを得ることができる.
ストリームソケットは(TCPより上の)特定のプロトコルを使用していないため, SDL_netを使用していないサーバにも接続できるが, HTTPのような任意のバイトストリーム以上のプロトコルで対話したい場合はストリームソケットの上に自分自身で実装しなければならない.
BSDソケットやWinSockとは異なり, ポートは通常の整数で指定する. ライブラリがアプリケーションの代わりに処理するため, バイト交換で「ネットワーク順」にする必要はない.
呼び出し側はプロパティで動作をカスタマイズできる.
これは任意で, propsを0にすると全てのプロパティをデフォルトにできる.
これらのプロパティに対応している:
NET_PROP_SERVER_REUSEADDR_BOOLEAN: 真のとき, 以前のサーバがこのアドレスを使用中でもサーバを生成する.
様々な理由でネットワークはアプリケーションが同じアドレスを再び使用する間に待ち時間を設けようとするが, ソフトウェア開発や単にクラッシュしたサービスの再起動するためにlistenを高速に行いたい場合には問題となりうる.
このプロパティのデフォルトは真である(しかし, OSレベルではデフォルトは偽であることに注意すること).
このプロパティが偽でOSが十分な時間が経過していないと判断した場合, サーバの生成は失敗し, この関数はエラーを報告する.
この関数はどのスレッドからも安全に呼べる.