我很新的編程和ESP網絡編程,所以如果它是愚蠢的,請不要太苛刻,謝謝。UDP和套接字,recvfrom()返回-1和資源暫時不可用
我有客戶端和服務器通信與圖表(UDP)在客戶端發送5個信息和收到消息後,服務器發回消息。接收和發送消息非常好,直到客戶端完成接收消息。在服務器發回所有消息後,它使用close()終止。所以客戶端的recvfrom()應該返回0,對吧?
假設recvfrom()從服務器端返回close()時應返回0,它將返回-1,而錯誤Resource暫時不可用。這是資源引用從服務器封閉的套接字?還是像其他完全不同的東西,比如用完緩衝區或其他東西(我認爲這不是真的)?
,並假設我的假設是錯誤的,則返回-1,因爲服務器端,我也許應該處理與
if(SOMEMACRO)
do something
的錯誤,但我如何找出SOMEMACRO
是什麼?我打印出來的錯誤,但它說資源temp不可用和recvfrom()描述沒有提到不可靠的資源..?
btw這是一個非阻塞套接字,如果這有什麼區別,因爲我讀過如果設置了O_NONBLOCK並且沒有消息可用,它會將errno設置爲EAGAIN或EWOULDBLOCK。 O_NONBLOCK未設置,但MSG_DONTWAIT已設置。他們基本上是相同的東西,其中O_NONBLOCK是用於一般文件描述符,而MSG_DONTWAIT是套接字特定的?
我的大腦現在並不是那麼偉大,如果有人能夠啓發我並澄清我的困惑,我會深表感謝。謝謝!
所以,如果你使用UDP,recvfrom()會返回0嗎?因爲你永遠不知道對方是否執行了有序的關機? – 2010-03-04 14:02:13
@Fantastic Fourier - UDP實際上可以發送一個只有IP和UDP頭但沒有數據有效載荷的數據報。這是完全合法的,並會看起來像一個0字節的讀取。 – Duck 2010-03-04 14:21:46
@Fantastic Fourier - 嚴格來說,由於UDP中沒有「連接」,所以沒有任何關閉,有序或其他。 – Duck 2010-03-04 14:28:33