Python で書いたことはなかったのでやってみる。
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # ↑をしないと、サーバ・プロセスを再起動したあと、TIME_WAIT の間ポートが使えない。 sock.bind(("127.0.0.1", 12345)) sock.listen(1) while True: print "Waiting..." cli, addr = sock.accept() print "Connected from client %s:%s" % addr while True: msg = cli.recv(100) # 100 は上限。これを超えると分割して取得される if msg == '': # 切断されると空文字列が返る break msg = "Received: %s\n" % msg.rstrip() print msg, cli.sendall(msg) print "Closed from client" cli.close() sock.close()
これを起動しておいて、telnet localhost 12345 として実験する。
複数の telnet クライアントから同時に接続してみると、2つ目以降も繋がるのだが応答はない。1つ目のクライアントを切断して始めて、二度目の accept() が呼ばれ、応答が行われる。