1

ネットワークが完全に接続されている必要があるピアツーピア プログラムを作成しています。しかし、これをローカルでテストして20ノードほど立ち上げたところ、一部のノードは他のノードへのソケットを正常に作成しましたが、直後に書き込むとパイプが壊れているというエラーが発生しました。これは、すべてのノードを次々と起動した場合にのみ発生します。1 秒ほど寝ていれば、この問題は見られません。

2 つのノードが相互にソケットを開くロジックを持っていますが、これはバグがある可能性がありますが、より少ないノードで適切に動作していることがわかります。これはローカルでのテストの制限ですか?

4

2 に答える 2

3

「壊れたパイプ」は、もう一方の端で既に閉じられている接続に書き込んだことを意味します。だから、あなたは何とかそれをしたに違いありません。

于 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 に答える