Python で記述されたクライアント サーバー アーキテクチャがあります。ほとんどの場合は問題なく動作しますが、サーバーを停止してすぐに再起動すると、次のエラーが発生することがあります。
Accept failed due to : 22 メッセージ Invalid argument, error: [Errno 22] Invalid argument
ただし、数分待ってから同じスクリプトを変更せずに再度開始すると、正常に動作します。
これは、クライアントからの着信接続を受け入れるためにサーバーで使用するループです。
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('',port))
s.listen(1)
except:
#logError()
while True:
try:
conn, address = s.accept() #THIS ACCEPT FAILS SOMETIMES
multiprocessing.Process(target=HandleConnection, args=(conn, address, messageQueue, taskQueue, IOLock, numberOfConnections, numberOfConnectionsLock,resultsDirectory)).start()
except socket.error, msg:
#logError() -> this except catches the error
サーバーを実行した後、しばらくポートがブロックされますか? もしそうなら、ポートがブロックされているかどうかを照会し、サーバーを終了した直後にサーバーを再起動したい場合、ブロックが解除されるまで待つ方法はありますか?