3

さて、私は Python 2.5 と Windows XP を持っています。ソケット オブジェクトで select.select を使用していました。何度も何度も試しましたが、実行するたびに、それが入っているスレッドで select.error(9, "Bad file descriptor") のようなエラーが発生します。コードは次のようなものです。

import socket, select
s = socket.socket()
s.bind((socket.gethostbyname(socket.gethostname()), 1312))
s.listen(5)
inputs = [s]
outputs = []
while True:
    r, w, e = select.select(inputs, outputs, inputs)
    for sock in r:
        if sock is s:
            inputs.append(s.accept()[0])
        else:
            print s
            print s.recv(1024)

どんな情報でもいただければ幸いです。ありがとう!

4

1 に答える 1

4
  1. あなたselect.selectは議論なしで電話をしました。次のようになりますselect.select(inputs, outputs, [])

  2. elseで使用する必要がありますが、(サーバー)sockではありません。s

  3. ピアが以前に接続されたソケットから切断されたら、inputsリストから削除する必要があります。sock.recv()空の文字列を返すか、socket.error例外を発生させた場合、ピアが切断されたことを知ることができます。これを行わないと、無効なソケット記述子をにフィードしてselect.select、前述のエラーが発生する可能性があります。

于 2012-10-07T13:35:03.097 に答える