2011-06-02 30 views
1

如果我在非阻塞套接字上使用recv(sockfd, buffer, len, 0);會發生什麼情況?linux recv()函數標誌參數?

如果插座sockfd已關閉或無法讀取,recv()是否會阻止? (注意:recv()中的標誌是0)。

回答

2

如果套接字被標記爲非阻塞,recv將永遠不會阻塞。期。

如果套接字很好,但沒有要讀取的數據,您將得到-1作爲返回值,並將errno設置爲EAGAIN。

如果有錯誤(關閉套接字等),您仍然會得到-1返回值,但是errno將被設置爲適當的值。

0

如果沒有東西要讀取,它會阻塞,如果套接字關閉,它將返回一個錯誤。

查看recv man page

+1

除非套接字被標記爲非阻塞,他說這是:-) – gby 2011-06-02 07:03:36