0

私は現在サブスクライブしているノンブロッキングソケットを持っています:

 ev.events = EPOLLIN | EPOLLPRI | EPOLLERR | EPOLLHUP | EPOLLRDHUP| EPOLLET;

いくつかの EPOLLIN を受信し、EAGAIN までノンブロッキングで読み取り、次に HUP と RDHUP を受信します。さらに数バイトを読み取ることもあります。

反対側は次のとおりです。

send(socket,960_bytes_buffer)
close(socket);

epollin と close 時間の両方のイベント ループで直接 msg_peek を使用して recv を試しました。

ソケットをノンブロッキングにするか、送信とクローズの間でクライアントに sleep(1) を入れると問題なく動作します。

epollに関連するよりも、ノンブロッキングソケットの問題に思えます。「nc -l -p port」のような単純なもので、適切な量のバイトを受け取ります。

4

1 に答える 1

6

究極のSO_LINGERページをご覧ください。または、なぜ私のtcpは信頼できないのか、何が起こっているのか、そしてそれを修正する方法をうまく説明しています。

于 2009-10-13T21:18:00.277 に答える