【发布时间】:2009-05-22 21:28:14
【问题描述】:
如果没有 C 语言中的 select(),有什么方法可以检查远程端的套接字是否断开连接?
我不想使用 select() 的原因是,在我的缓冲区已满的情况下,可能会有我故意忽略的套接字上可供读取的数据和 select(readfds=[socket_fd] ) 总是会立即返回并通知我。
【问题讨论】:
如果没有 C 语言中的 select(),有什么方法可以检查远程端的套接字是否断开连接?
我不想使用 select() 的原因是,在我的缓冲区已满的情况下,可能会有我故意忽略的套接字上可供读取的数据和 select(readfds=[socket_fd] ) 总是会立即返回并通知我。
【问题讨论】:
如果你在socket上有一个阻塞的read()函数调用,并且它返回整数值0,这意味着socket连接被关闭了。
while ( n = read(sockfd, buffer, BUFFER_SIZE) ) {
//use buffer contents
}
当从另一端发送数据时,此循环将继续。
【讨论】:
所以请改用poll(),将events 设置为您关心的内容,并检查revents 中的结果。仅供参考,您可以调用 select() 或 poll() 而不会损坏套接字或更改其缓冲区。
【讨论】: