時收到FD_CLOSE我的客戶端工作站有一個奇怪的問題。我有一個簡單的應用程序,通過網絡在兩個端點之間交換一些數據。當應該有FD_READ
基本上事務是這樣的:
- 客戶端A監聽進來的連接
- 客戶端B連接到A和發送一些數據
- 客戶端A讀取該數據以供進一步處理
現在奇怪的部分是客戶端A沒有收到整個數據(有時它是緩衝區的一部分,有時它是空的)。
A客戶端使用WSAEventSelect函數,並等待FD_READ讀取B發送的數據,並等待FD_CLOSE檢測斷開連接。
通常(除了這一個特定的客戶端以外)FD_READ被髮信號,數據被處理,然後FD_CLOSE被髮信號並且一切正常,但是這裏FD_READ我接收FD_CLOSE。
有人能告訴我這可能嗎?另一件事是該程序運行良好大約一年,並突然崩潰。
「你永遠不會在阻塞模式下收到零字節」,是的,你會的。這就是報告的正常斷開連接 - 通過'recv()'返回0。 – 2013-02-22 01:37:17
我知道FD_READ可以發信號一次,但它爲什麼沒有發信號,我收到只是FD_CLOSE – 2013-02-22 07:42:54
@RemyLebeau當然,但不是接收零字節,這是使用零作爲一個標記來表明EOS,它只是可能*因爲*你永遠不會收到零字節。 – EJP 2013-02-22 22:03:17