有没有办法检查套接字是否在远程端断开而没有C中的select()?
我不想使用select()的原因是,在我的缓冲区已满的情况下,可能有数据可用于读取我故意忽略的套接字和select(readfds = [socket_fd] )会立刻回来让我知道。
答案 0 :(得分:4)
如果在套接字上有一个阻塞的read()函数调用,并且它返回整数值0,则表示套接字连接已关闭。
while ( n = read(sockfd, buffer, BUFFER_SIZE) ) {
//use buffer contents
}
从另一端发送数据时,此循环将继续。
答案 1 :(得分:1)
所以请改用poll()
,将events
设置为您关注的内容,并在revents
中查看结果。仅供参考,您可以致电select()
或poll()
而不会损坏套接字或更改其缓冲区。