1

我正在编写一个需要完全连接网络的点对点程序。但是,当我在本地对此进行测试并调出大约 20 个节点时,一些节点成功创建了到其他节点的套接字,但是在发生断管错误后立即写入时。这只发生在我一个接一个地启动所有节点时;如果我睡一秒钟,我看不到这个问题。

我有处理两个节点的逻辑,这两个节点都打开了彼此的套接字,这可能是错误的,尽管我确实看到它在较少节点的情况下正常运行。这是本地测试的限制吗?

4

2 回答 2

3

'Broken pipe' 表示您已写入已被另一端关闭的连接。所以,你一定是以某种方式做到了这一点。

于 2012-11-22T20:05:18.897 回答
-1

当您尝试写入另一端已关闭的管道时,会发生“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
于 2013-12-27T10:28:18.320 回答