(rontolisp) docs
← 関数

rontolisp:tcp-accept

(rontolisp:tcp-accept listener)

クライアントが接続してくるまでブロックし (rontolisp:tcp-listen のリスナーハンドルに対して)、 受け付けた接続の双方向ストリームハンドルを返します — rontolisp:tcp-connect が返すものと同じ種類の ハンドルで、read-linewrite-lineread-bytewrite-byteclose が 使えます。

以下の例は自己完結しています: クライアントが 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 のサーバー ループを参照)。