閉じたクライアントソケットがelistに追加されましたが、selectが呼び出された場合のexにも例外はありません。理由はわかりませんが、手伝ってくれませんか。本当にありがとう!
r,w,ex = select.select(rlist, wlist,elist )
for s in ex:
print "catch a closed socket error!"
ソケットが閉じられているイベントをキャッチするには、ソケットをに入れる必要がありますrlist
。反対側で接続が閉じられると、戻り、閉じたソケットが読み取りselect
の準備ができていることを示します(つまり、リストにあります)。このソケットで実行し、空のリスト(何も読み取られていない)を返す場合は、接続が閉じられたことを意味します。r
recv
data = s.recv(size)
if not data:
# socket has been closed by peer
s.close()
私が見たところ、例外リスト(selectの最後のパラメーター)は広く使用されていません。これに関する主な問題は、OSが異なればこのパラメーターの解釈も異なることです。例外ではないように思われる場合(OOBデータ)にのみ使用されることもあります。
socket
モジュールのドキュメントは、その引数が何を意味するかについて具体的ではないため、一般的に、それに依存することはお勧めできません。
xlist:「例外的な状態」を待ちます(システムがそのような状態と見なすものについては、マニュアルページを参照してください)