他の場所では見つけられなかったPythonのソケットモジュールに問題があります。Pythonソケットはタイムアウトしません
私はシンプルなTCPチャットクライアントを構築していますが、最初にサーバに正常に接続すると、タイムアウトの長さを明示的に設定しても、スクリプトは無限にsock.recv()
にハングします。
異なるタイムアウト値を使用して、setblocking(False)
を含めて試しましたが、私が何をしても、ソケットがブロックモードになっているように動作します。ここで
私のコードの関連部分です:任意の提案は参考になる
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
def listen_to_server():
global connected
while connected:
ready_to_read, ready_to_write, in_error = select.select([sock], [], [])
if ready_to_read:
try:
data = sock.recv(1024)
except socket.timeout:
print('TIMEOUT')
if not data:
append_to_log('Disconnected from server.\n')
connected = False
else:
append_to_log(str(data))
、私はここで全損でね。
タイムアウトが効かない理由はわかりませんが、最初のif文は次のようにする必要があります:ready_to_readのソケットがある場合: –
'socket.bind()'は呼び出されません。いくつかのポイント? – Dziugas
また、 'timeout'を使用している場合、ソケットはブロックモードになっているはずです。 – Dziugas