鍍金池/ 問(wèn)答/C  Linux/ C 如何判斷另一端的tcp socket is closed?

C 如何判斷另一端的tcp socket is closed?

現(xiàn)在的解決方法

// server端是否斷開(kāi)連接
bool is_server_disconnected(int client_socket)
{
    // 非阻塞
    set_flag(client_socket, O_NONBLOCK);
    char buffer[10];
    int length = recv(client_socket, buffer, 10, 0);
    clr_flag(client_socket, O_NONBLOCK);
    return length == 0;
}

把client_socket設(shè)置成了非阻塞,然后recv如果返回0了,說(shuō)明remote socket is closed.

When a stream socket peer has performed an orderly shutdown, the
return value will be 0 (the traditional "end-of-file" return).

Linux man

其他方法

tcp斷開(kāi)暫借不考慮,不知道有沒(méi)有更簡(jiǎn)單更好的方法??

回答
編輯回答
淚染裳

poll man
可以跳過(guò)系統(tǒng)緩沖區(qū)檢測(cè)socket狀態(tài),并且可以輕松實(shí)現(xiàn)監(jiān)管所有子線程。

POLLHUP for 正常關(guān)閉
POLLERR for 程序掛了

想要檢測(cè)網(wǎng)線掛了的話只能發(fā)心跳包,SO_KEEPALIVE。

2018年4月15日 18:52