我正在编写一个需要完全连接网络的点对点程序。但是,当我在本地对此进行测试并调出大约 20 个节点时,一些节点成功创建了到其他节点的套接字,但是在发生断管错误后立即写入时。这只发生在我一个接一个地启动所有节点时;如果我睡一秒钟,我看不到这个问题。
我有处理两个节点的逻辑,这两个节点都打开了彼此的套接字,这可能是错误的,尽管我确实看到它在较少节点的情况下正常运行。这是本地测试的限制吗?
我正在编写一个需要完全连接网络的点对点程序。但是,当我在本地对此进行测试并调出大约 20 个节点时,一些节点成功创建了到其他节点的套接字,但是在发生断管错误后立即写入时。这只发生在我一个接一个地启动所有节点时;如果我睡一秒钟,我看不到这个问题。
我有处理两个节点的逻辑,这两个节点都打开了彼此的套接字,这可能是错误的,尽管我确实看到它在较少节点的情况下正常运行。这是本地测试的限制吗?
'Broken pipe' 表示您已写入已被另一端关闭的连接。所以,你一定是以某种方式做到了这一点。
当您尝试写入另一端已关闭的管道时,会发生“Broken Pipe”错误。如果您正在创建自己的套接字,则可以处理这样的脚本:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('', 2020))
try:
s.recv(1024)
except socket.error as e:
print e
print
s.send('hello')
对于这种错误,这段代码对我来说很好。如果连接被客户端重置/终止,则可能会忽略 Broken Pipe。
[Errno 104] Connection reset by peer
Traceback (most recent call last):
File "./client1.py", line 17, in
s.send('hello')
socket.error: [Errno 32] Broken pipe