套接字:客户端是否断开连接?

时间:2009-11-26 21:20:59

标签: windows linux sockets

我正在创建套接字服务器。但我不知道,我怎么知道客户端是否断开连接? 我在Windows下创建服务器并使用berkeley套接字功能(读取,发送,连接....)。 我最好想要一个跨平台解决方案(没有WSA功能)。

我可以写入socket 0字节和ckeck错误。但这不是好的解决方案。

1 个答案:

答案 0 :(得分:4)

当客户端断开连接时,您将收到“读取”事件,但read()将返回0.

ssize_t bytes_read;
if ((bytes_read = read(...)) == 0)
{
    // client disconnected
}
else if (bytes_read == -1)
{
    // some sort of error (also no data available when using non-blocking sockets).
}
else
{
    // you have bytes_reads bytes to process
}