为了账号安全,请及时绑定邮箱和手机立即绑定

如果在超时之前没有收到任何数据,Python的socket.recv()对于非阻塞套接字返回什么?

如果在超时之前没有收到任何数据,Python的socket.recv()对于非阻塞套接字返回什么?

慕标5832272 2019-12-25 10:42:39
基本上,我已经在几个地方阅读过,socket.recv()将返回它可以读取的内容,或者是一个空字符串,表示另一端已关闭(官方文档甚至没有提到关闭连接后返回的内容...大!)。对于阻塞套接字来说,这一切都很好,很花哨,因为我们知道recv()只有在实际有东西要接收时才返回,所以当它返回一个空字符串时,必须表示另一端已关闭连接,对吗?好的,很好,但是当我的套接字未阻塞时会发生什么?我进行了一些搜索(可能还不够,谁知道?),并且不知道如何知道何时使用非阻塞套接字关闭了另一端。似乎没有任何方法或属性可以告诉我们这一点,将的返回值recv()与空字符串进行比较似乎绝对没有用……只是我有这个问题吗?举个简单的例子,假设我的套接字的超时设置为1.2342342(无论您在这里喜欢什么非负数)秒,然后我都打电话给socket.recv(1024),但是另一端在那段1.2342342的时间内没有发送任何东西。该recv()呼叫将返回一个空字符串,并且我不知道该连接是否仍处于站立状态...
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

很简单:如果recv()返回0个字节,则返回0。您将不会再通过此连接收到任何数据。曾经 您仍然可以发送。


这意味着,如果没有可用数据但连接仍然有效(另一端可能发送),则非阻塞套接字必须引发异常(可能与系统有关)。


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 957 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信