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

提问关于在Python中socket里的.recv()函数问题

提问关于在Python中socket里的.recv()函数问题

当年话下 2021-11-03 11:07:58
现在想往指定IP的指定端口发送一组测试数据,要求接收每一条测试数据的返回值,1s内没有接收到返回的话算作超时,继续发送下一条。现在的问题是一旦有超时的,再发送下一条时程序就报错:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。不太了解socket方面的知识,哪位朋友帮忙说说怎么回事
查看完整描述

1 回答

?
长风秋雁

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

可以通过setsockopt,或者更简单的setblocking,
settimeout设置。阻塞式的socket的recv服从这样的规则:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,阻塞直到缓冲区中有数据。非阻塞式的socket的recv服从的规则则是:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,产生EAGAIN的错误并返回(在Python中会抛出一个异常)。两种情况都不会返回空字符串,返回空数据的结果是对方关闭了连接之后才会出现的。

查看完整回答
反对 回复 2021-11-07
  • 1 回答
  • 0 关注
  • 320 浏览
慕课专栏
更多

添加回答

举报

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