微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UNIX套接字:如何检查TCP流是否已关闭以进行读取或EOF?

如何解决UNIX套接字:如何检查TCP流是否已关闭以进行读取或EOF?

| 我正在编写一个简单的客户端,该客户端通过TCP流读取二进制数据。 由于文件是部分发送的,因此我有一个类似于此循环的循环:
while (1 /* Maybe a check for EOF or if the socket is closed here ? */) {
  ssize_t bytes_red = recv(
  if (bytes_read <= 0) // not working properly ?
    break;
  ...
}
读取是通过recv()方法完成的,该方法返回接收到的字节数。 这个想法显然是只要打开TCP流就读取数据,但是上述方法似乎对我不起作用。 还有其他想法吗?从套接字读取直到流关闭或遇到EOF的一种干净方法是什么? 编辑:上面的方法工作正常,我在其他地方有一个错误。     

解决方法

如果套接字已正确关闭,则“ 1”将返回0;如果有错误,则返回-1。因此,您阅读直到
recv()
返回
<=0
。您发布的代码段看起来正确-为什么您认为它不适合您?会发生什么,您期望什么? 如果您的套接字是非阻塞的,则还必须处理ѭ1返回-1且
errno
设置为
EAGAIN
EWOULDBLOCK
的情况。这意味着套接字仍然可以正常使用,但是现在没有更多数据了。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。