(rontolisp) docs
← 関数

rontolisp:tcp-set-timeout

(rontolisp:tcp-set-timeout handle milliseconds)

接続済みソケットハンドルの読み取りデッドラインを設定します: 以降のこのハンドル に対するブロッキング読み取り(read-lineread-charread-byte など)は、 データが milliseconds ミリ秒間届かないと、永久に待つ代わりにエラーを通知する ようになります。milliseconds は非負整数 (rontolisp:wait-for と同じ規約)で、nil は デッドラインを解除します。戻り値は milliseconds 引数です。リスナーハンドルは 受け付けません(これは読み取りのデッドラインです)。

タイムアウトのエラーは、タイムアウトした読み取りをメッセージに含む通常の 捕捉可能な error で、専用のコンディションクラスではありません。デッドライン は生のソケット側にあるため、あとから rontolisp:tls-upgrade でアップグレードした接続にも 効き続けます。これは usocket シムの (setf (usocket:socket-option sock :receive-timeout) seconds) を支える プリミティブです (TCP ソケットガイド を参照)。

バックエンドのサポート

  • インタプリタJVM: 実装済み。Socket.setSoTimeout を使用します。
  • WASM component: 呼び出し時にエラーを通知します — wasi:sockets@0.3.0 には受信タイムアウトのノブがなく、黙って発火しないタイムアウトはクライアント がまさに避けるために設定するものだからです。このバックエンドでは捕捉するか、 読み取りタイムアウトを設定しないでください。Preview 1(コアモジュール) モードでは他の tcp 組み込みと同様、呼び出し時エラーです。
  • ブラウザプレイグラウンド: 非対応。