プログラムはサーバに接続し、サーバが接続を閉じると再接続しようとします:socket.error: [Errno 9] Bad file descriptor
クライアントのソケットを閉じて再接続しようとすると、socket.error: [Errno 106] Transport endpoint is already connected
と表示されます。破損したパイプの後にソケットを再接続するにはどうしたらいいですか?
新しいソケットを作成せずに壊れたパイプの後に再接続する方法はありますか?
これはコネクション指向のソケットであると仮定すると、import socket
host = '127.0.0.1'
port = 1337
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def loop():
try:
while 1:
print s.recv(512)
except socket.error:
#s.close()?
connect()
def connect():
s.connect((host, port))
loop()
connect()
これは、ソケット接続がオペレーティングシステムレベルで管理されているためです(これはプログラミング言語にも該当します)。 Linuxでは、ファイルディスクリプタが接続に割り当てられ、接続が閉じられると破棄されるため、新しいファイルディスクリプタを作成する再接続が必要です。 – EdwardGarson