3

それが問題なら、Fedora 13を実行しています。

unix(7)、setsockopt、および send/recv のマニュアル ページを調べました。

マニュアルページを読むと、多かれ少なかれ、すべてのオプションが何かを行うことが保証されているわけではないことがわかります...そして、実際に文書化されているのは、機能する/機能しないオプションのほんの一部です。

特に...タイムアウトが可能かどうかを確認したかったのです。少なくとも私のシステムでは、SO_RCVTIMEO は実際に recv ファミリーの呼び出しのタイムアウトを設定します... しかし、SO_SNDTIMEO はソケットをタイムアウトなしのノンブロッキング モードに設定しているように見えます。

だから私の質問は... setsockopt が AF_UNIX ソケットでタイムアウトを処理するための信頼できる方法ではないという事実を回避するにはどうすればよいですか?

4

2 に答える 2

1

うーん、select(2)または またはpoll(2)またはepoll(4)タイムアウトはどうですか?

于 2010-07-16T13:25:45.423 に答える
-1

Setsockopt が AF_UNIX ソケットでタイムアウトを処理する信頼できる方法ではないという事実を回避するにはどうすればよいですか?

まあ、それらを使用しないでください。

G-WAN (Web App. Server) で epoll(4) を使用しましたが、同じ問題に直面しなければなりませんでした。

タイムアウトを処理するには、基本的に次の 3 つの方法があります。

  1. タイマー (愚か者のようにコードを中断することを気にしない場合)
  2. ポーリング (fds をチェックするためのループを持つ専用スレッド、時間がかかります)
  3. タイムアウト (タイムアウト値を持つ epoll_wait() のように、すべてを遅くします)

操作したい fds をウェイクアップするためにパイプを使用するものもあります。私のテストでは、リソースの途方もない浪費であることが示されました。何をするにせよ、これは非効率的であるか、トリッキーです。場合によっては、両方 (ばかげたカーネル開発者のおかげです)。

幸運を。

于 2010-07-16T13:53:39.677 に答える