现在想往指定IP的指定端口发送一组测试数据,要求接收每一条测试数据的返回值,1s内没有接收到返回的话算作超时,继续发送下一条。现在的问题是一旦有超时的,再发送下一条时程序就报错:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。不太了解socket方面的知识,哪位朋友帮忙说说怎么回事
1 回答
长风秋雁
TA贡献1757条经验 获得超7个赞
可以通过setsockopt,或者更简单的setblocking,
settimeout设置。阻塞式的socket的recv服从这样的规则:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,阻塞直到缓冲区中有数据。非阻塞式的socket的recv服从的规则则是:
当缓冲区内有数据时,立即返回所有的数据;当缓冲区内无数据时,产生EAGAIN的错误并返回(在Python中会抛出一个异常)。两种情况都不会返回空字符串,返回空数据的结果是对方关闭了连接之后才会出现的。
添加回答
举报
0/150
提交
取消