管道破裂的原因

时间:2012-11-22 14:29:40

标签: python networking pipe

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

我有逻辑处理两个节点,这两个节点都打开了彼此的插座,这可能是错误的,虽然我确实看到它运行正常,节点较少。这是本地测试的限制吗?

2 个答案:

答案 0 :(得分:2)

'断管'表示您已写入已被另一端关闭的连接。所以,你必须以某种方式做到这一点。

答案 1 :(得分:-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