2

TIMEOUTUDP Stop-and-wait で機能を実現しようとしています。つまり、受信ACK者が意図的に送信しないようにし、送信者が の後に再送信することを期待していTIMEOUTます。

ただし、recvfromのドキュメントには次のように記載されています。

ソケットでメッセージが利用できない場合、受信呼び出しは、ソケットがノンブロッキングでない限り、メッセージが到着するのを待ちます。

したがって、送信者と受信者の両方が と で行き詰まりsendto()ますrecvfrom()。彼らは両方ともハングします!を達成するためにコードを実行し続けることができる方法がほとんどありますTIMEOUT

どうすればいいですか?

4

2 に答える 2

2

SO_RCVTIMEO関数を介してオプションを設定しますsetsockopt()。次に、タイムアウトがトリガーされると、またはに設定されたrecvfrom()-1 が返されます。errnoEAGAINEWOULDBLOCK

于 2013-10-28T22:14:05.437 に答える