2

Gnat Socketsパッケージを使用しています。次のように作成および初期化されたサーバー側ソケットがあります。

   GNAT.Sockets.Create_Socket(...);

...

   GNAT.Sockets.Set_Socket_Option
     (Socket => Server,
      Option => (Name => GNAT.Sockets.Receive_Timeout,
                 Timeout => Listner_Timeout));

...

   GNAT.Sockets.Listen_Socket(...);
   GNAT.Sockets.Accept_Socket(...);

すべて順調ですが、使用するときは:

   GNAT.Sockets.Receive_Socket(...);

ソケットがタイムアウトしたかどうかを検出する方法、またはソケットが戻ったときにデータを読み取る方法がわかりません。メソッドを使用する必要がありますかCheck_Selector(この使用には少し重いようです。その場合、これは呼び出しで設定されたタイムアウトと相互作用しSet_Socket_Optionます)?

ありがとう、

4

4 に答える 4

0

select非同期を使用してタイムアウトのケースを処理する人について読んだと思います...次のようなもの:

loop
  select
    -- HANDLE SOCKET RECEPTION
   or
    delay 7.0; -- Wait seven seconds to timeout.
  end select;
end loop;

Note:上記はメモリからのものであり、構文チェックもコンパイルもされていません。

于 2013-07-11T22:42:26.590 に答える