2015-11-29 32 views
1

我在c中有一個客戶端服務器程序。 我正在使用select來確保客戶機已準備好接受數據(即 - client_fd位於select所返回的write_fds中)。 如果客戶端確實已經準備好接受數據,我可以確定,如果我發送給這個客戶端(使用c方法'send',並且要發送的字節數大於0),實際發送的字節數=='send'返回)至少有1個字節?或0仍然有可能?C TCP套接字,使用select後可以'發送'返回0嗎?

感謝

*注意:客戶端連接到只有一個服務器,沒有別的。

回答

1

零不可能。它將傳輸至少一個字節並返回成本,如果緩衝區已滿非阻塞模式,則返回-1與errno == EAGAIN/EWOULDBLOCK;如果出現錯誤,則返回-1與其他一些errno。如果select()已經指出,它不應該給-1/EAGAIN/EWOULDBLOCK,除非存在對套接字的多線程寫入。

+0

非常感謝你 – user5618793

+0

好吧,從技術上說是錯誤的。上面列出的兩個以上錯誤可能會觸發send返回-1。當然,最重要的是插座在另一側被關閉。 – SergeyA

+0

當然,還有不止兩個錯誤。答案是關於問題中提到的情況。 – EJP

相關問題