1

質問があります

指定された時間内にクライアントがサーバーに応答しなかったかどうかを知る方法は?!

選択機能ではなくスレッドを使用しています。

あなたの助けは大歓迎です:)

ありがとうございました。

4

1 に答える 1

1

次のように[ソケットオプションの設定][1]を調べる必要があります。

setsockopt(sockid, SOL_SOCKET, SO_RCVTIMEO,(char *)&tv,sizeof(struct timeval));

SOCKET_ERRORこれが完了したら、受信および/または送信関数を呼び出すときに再度確認できます。特定のエラー コードは、 を呼び出して取得できますWSAGetLastError

これは、潜在的なエラー コードの 1 つです。

WSAEWOULDBLOCK 10035

リソースが一時的に利用できません。

このエラーは、ソケットから読み取るデータがキューに入れられていない場合の recv など、すぐに完了できない非ブロッキング ソケットの操作から返されます。これは致命的ではないエラーであり、後で操作を再試行する必要があります。非ブロッキング SOCK_STREAM ソケットで connect を呼び出した結果として WSAEWOULDBLOCK が報告されるのは正常です。これは、接続が確立されるまでに時間がかかるためです。

于 2014-04-06T09:24:55.810 に答える