Python で TCP サーバーをプログラミングしているときに、一方の端または他方の端が予期せず停止したときに、さまざまな条件で発生するいくつかのエラーがあることに気付きました。
たとえば、「パイプが壊れた」( errno.EPIPE
) こともあれば、「接続が中止された」(errno.CONNABORTED
またはerrno.WSAECONNABORTED
) になったこともあります。OS 間でコードが同じではないということもありますが、Python のerrno
モジュールがそれを処理していると思います。
探しているものが見つからずに、ソケット接続のエラーコードの意味のリストをたくさん検索しました。
私が今まで持っているものは次のようなものです:
try:
# write or read operation
except socket.error as e:
if e.errno in (errno.EPIPE, errno.ECONNABORTED, errno.WSAECONNABORTED):
print 'Connection lost with server...'
今までは順調に動いていたのですが、最後の追加前にもWindowsで不具合が発生して追加したため、対応できていないケースもあるかと思います。また、時々、エラーをスローせずに空の行を読み続けたり (with でrecv
)、不正なファイル記述子などを読み続けたりすることもありました。
SocketServer
クラスはそのようなものを提供していますか?それとも一般的なTCP接続ですか?