0
我有連接到服務器的客戶端iOS應用程序。 它使用非阻塞套接字。檢測斷開的插座?
int fl;
fl=fcntl(s,F_GETFL,0);
fcntl(s,F_SETFL, fl | O_NONBLOCK);
int set = 1;
setsockopt(s, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int));
- 如果沒有數據,那麼通過-1
read
- 返回如果斷開連接,然後通過0
read
返回,但它並不總是正確的。有時連接丟失,但返回-1。
是否有像eof
這樣的東西來檢測?
@downvoter如果你知道一些我不關於TCP的內容,請與我們分享。就我而言,無法解釋的downvotes僅僅是網站破壞行爲。 – EJP
我還沒有投票給你。我認爲當返回-1時檢查'errno!= ENODATA'是有意義的 – Max
@Max否,如果你處於非阻塞模式,檢查它是否爲'EAGAIN'或'EWOULDBLOCK'是有意義的。 'recv()'不設置'ENODATA'。 – EJP