ソケットをデフォルトの非ブロッキング状態に設定し、トラップ例外を使用して、非ブロッキングによるソケットの異常を処理し、プログラムの通常の動作を実現します。効果は次のとおりです。
1 インポートソケット 2 3 4 def main(): 5 tcp_server_socket = socket.socket(socket.AF_INET、socket.SOCK_STREAM) 6 tcp_server_socket.bind((''、7788 )) 7 tcp_server_socket.listen(128 ) 8 tcp_server_socket.setblocking(偽) #のセット非目詰まりリスニングソケット 9 10 client_socket_list =リスト() #は、クライアントソケットを格納し、リストを提供する 11。 一方で真: 12は、 試してみる: 13です CLIENT_ADDR =、のソフトウェアので、tcp_server_socket.accept() 14 を除い: 15 パス 16 #の印刷( "なし新しいクライアント接続") 17。 他: 18は、 印刷(" クライアントへ" ) 19。 new_socket.setblocking(偽) #の設定クライアントソケット非詰まりワード 20である (ソフトウェアのため)client_socket_list.append 21は 22である 。#リストがループに対して実行されていない空である 23である ため client_socket でclient_socket_list: 24 試み: 25 recv_data = client_socket.recv(1024 ) 26は 除く: 27の パス 28 #( "クライアントからデータを受け取っていない")を印刷 29 他: 30 のIF recv_data: 31は 印刷(recv_data.decode('UTF-8 ' )) 32 #があったrecvがなく、何もデータが受信されません、実証されたクライアントは、接続クローズし33である他: 34である client_socket_list.remove(client_socket) 35 client_socket.close() 36 37 38であるIF __name__ == ' __main__ ' : 39 メイン()