2009-10-13 122 views
0

我已經目前訂閱非阻塞插座:失去字節非阻塞套接字時對方寫和關閉

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

它接收一對夫婦EPOLLINs的我讀非阻止直到EAGAIN,然後我收到HUP & RDHUP,有時還有幾個字節需要讀取。

對方就是:

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

我試着MSG_PEEK recv的直接在兩個epollin事件循環和關閉時間,並增加接收到的數據沒有收到960始終,有時只有大約480字節。

使發送和關閉之間的套接字非阻塞或休眠(1)在客戶端工作正常。

它在我看來更多的是與epoll相關的非阻塞套接字問題。一些簡單的「nc -l -p port」接收適當的字節數量。

+0

在檢查IN位之前是否檢查HUP位的事件? – 2009-10-13 14:58:10

+0

是的,我確實,在任何情況下,在HUP之後關閉()並關閉之前檢查未決數據 – 2009-10-13 16:03:35

+0

如何檢查未決數據? – 2009-10-13 16:11:59

回答