连接套接字上的read()函数可以返回零字节吗?

时间:2010-03-10 12:50:36

标签: linux sockets tcp network-programming runtime-error

我知道read()是一个阻塞调用,除非我使套接字无阻塞。所以我希望read()调用请求4K数据应该返回一个正值(没有读取的字节数)或错误的-1(客户端可能的连接重置等)。我的问题是:read()可以在任何场合返回'0'吗?

我正在以这种方式处理read():

   if ((readval = read(acceptfd, buf, sizeof(buf) - 1)) < 0)
    {

    }
    else
    {
       buf[readval] = 0;
       //Do some thing with data  
    }

如果read()返回零并且我知道如何修复它,此代码会发生炸弹。但是read()有可能返回零吗?

1 个答案:

答案 0 :(得分:47)

当一侧关闭TCP连接时,另一端的read()返回0字节。