1

VxWorks sockLib は、winsock のように recv 呼び出しのタイムアウトを設定するために setsockopt で使用できる SO_RCVTIMEO オプションをサポートしていますか?

Windows での呼び出しの例を次に示します。

int timeout = 30000; // 30 seconds
status = setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(int));

これに関する紛らわしい点は、setsockopt によって返されるステータスが不明なオプションからのエラーを示しておらず、SO_RCVTIMEO が sockets.h で定義されていることです。ただし、呼び出しはまだ目的のアクションを生成しません。サポートされていることを示すドキュメントは見つかりません。

サポートされていない場合、同等のアプローチの提案はありますか?

VxWorks 5.4 を使用しています。それ以降のバージョンで動作するかどうか知りたいです。

4

1 に答える 1

-1

この質問に直接答えることはできませんが、これらのタイプの「受信をブロックする」スタイルの問題を解決するには、select() 関数を使用して、着信ソケット データを待機する際のタイムアウトを指定すると言えます。次に、ソケットに使用可能なデータがあることがわかるまで、ブロッキング recv() 呼び出しを完全に回避できます。

VxWorks (#include "selectLib.h") だけでなく、Linux および Windows ソケット ライブラリにもこのソリューションをお勧めします。SO_RCVTIMEO は便利ですが、select () はすべてのオペレーティング システムでさらに便利です。

于 2012-04-09T15:02:17.767 に答える