我正在編寫一個需要網絡完全連接的點對點程序。但是,當我在本地測試並調出大約20個節點時,某些節點成功創建了一個到其他節點的套接字,但是在發生故障管道錯誤後立即寫入。這隻有當我開始所有的節點時纔會發生。如果我睡了一秒鐘,我沒有看到這個問題。管道破裂的原因
我有邏輯來處理兩個節點,這兩個節點都打開套接字eachother,這可能是越野車,但我確實看到它運行正常與較少的節點。這是本地測試的限制嗎?
我正在編寫一個需要網絡完全連接的點對點程序。但是,當我在本地測試並調出大約20個節點時,某些節點成功創建了一個到其他節點的套接字,但是在發生故障管道錯誤後立即寫入。這隻有當我開始所有的節點時纔會發生。如果我睡了一秒鐘,我沒有看到這個問題。管道破裂的原因
我有邏輯來處理兩個節點,這兩個節點都打開套接字eachother,這可能是越野車,但我確實看到它運行正常與較少的節點。這是本地測試的限制嗎?
「斷開的管道」表示您已寫入已由另一端關閉的連接。所以,你必須以某種方式做到這一點。
當您嘗試寫入已在另一端關閉的管道時,會發生「斷管」錯誤。這可能,如果你正在運行一個腳本,這樣,如果你正在創建自己的插座進行處理編輯:
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')
此代碼工作正常,我對這種錯誤。由於斷開的管道可以被忽略,如果連接被客戶端重置/終止。
[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
在這種情況下,在recv()方法之後停止,而不是在發生任何可能的EOS或錯誤之後繼續執行send(),就好像它沒有發生一樣。 – EJP
一個點對點的程序,連接需要形成一個完整的圖表嗎?我希望你打算這是一個修補器玩具 – goncalopp
另外,當你創建「兩個節點都打開套接字到海誓山盟」,你是否確保你打開任何一個節點連接之前的偵聽套接字?正如你所提到的,你應該睡一會兒,直到所有的監聽套口打開爲止 – goncalopp
我不是,但套接字正在創建,只是在寫入時拋出一個破損的管道異常。 – user490895