rontolisp:tcp-accept
(rontolisp:tcp-accept listener)
クライアントが接続してくるまでブロックし
(rontolisp:tcp-listen のリスナーハンドルに対して)、
受け付けた接続の双方向ストリームハンドルを返します —
rontolisp:tcp-connect が返すものと同じ種類の
ハンドルで、read-line、write-line、read-byte、write-byte、close が
使えます。
以下の例は自己完結しています: クライアントが accept より前に接続するため、 接続は listen バックログで待機し、シングルスレッドのプログラムでも長時間 ブロックしません:
バックエンドごとの対応
- インタープリタと JVM:
java.net.ServerSocket.accept()を使用します。 閉じたリスナーでの accept はエラーを通知します。 - WASM: コンポーネント専用。accept は
wasi:sockets@0.3.0の accept ストリームからtcp-socketハンドルを 1 つ読み出す協調ブロッキング読み取り です。accept に失敗するとnilを返します。Preview 1(コアモジュール) モードではコンパイルエラーです。 - ブラウザプレイグラウンド: 非対応。
制限事項
- クライアントが接続するまで無期限にブロックします。タイムアウト引数は ありません。
- 1 回の呼び出しで処理できる接続は 1 つです。次のクライアントには再度 accept
してください(
rontolisp:tcp-listenのサーバー ループを参照)。