我想在尝试读取套接字之前检查套接字是否仍处于活动状态,但似乎recv()和read()将返回0,无论如何。根据手册页:
当流套接字对等体执行了有序关闭时,返回值将为0(传统的"文件结束"返回)。
但是:
如果从流套接字接收的请求字节数为0,则也可以返回值0。
如何区分这两种情况?如果那是不可能的,还有其他一些方法可以判断套接字是否已关闭/关闭?
答案 0 :(得分:2)
使用非零<button class="list-group-item" disabled>Select me</button>
<button class="list-group-item">But no me</button>
和recv()
标记来呼叫length
。然后检查返回值是否为MSG_PEEK
。使用0
可以防止这种情况消耗任何数据 - 下一个MSG_PEEK
会再次阅读。
答案 1 :(得分:-1)
以上都不是正确答案。
非阻塞套接字将返回-1并设置errno == EAGAIN || errno == EWOULDBLOCK,如果根本没有新数据。 如果连接正常,远程对等端recv将返回0。