检查套接字是否在C中断开,没有select()

时间:2009-05-22 21:28:15

标签: c sockets

有没有办法检查套接字是否在远程端断开而没有C中的select()?

我不想使用select()的原因是,在我的缓冲区已满的情况下,可能有数据可用于读取我故意忽略的套接字和select(readfds = [socket_fd] )会立刻回来让我知道。

2 个答案:

答案 0 :(得分:4)

如果在套接字上有一个阻塞的read()函数调用,并且它返回整数值0,则表示套接字连接已关闭。

while ( n = read(sockfd, buffer, BUFFER_SIZE) ) {
     //use buffer contents
}

从另一端发送数据时,此循环将继续。

答案 1 :(得分:1)

所以请改用poll(),将events设置为您关注的内容,并在revents中查看结果。仅供参考,您可以致电select()poll()而不会损坏套接字或更改其缓冲区。