ソケットをノンブロッキングに設定するには

ソケットを非ブロッキングモードにするには,次の手順を使用できます。

  1. ソケットオブジェクトを作成する
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  1. ソケットを非ブロックモードにする。
sock.setblocking(False)

これによりソケットのすべての操作、つまり接続、送信、受信が非ブロックになります。

  1. 接続する
sock.connect(('localhost', 8080))

ソケットが非ブロッキングモードのため、connect()メソッドは接続完了を待たずにすぐに返る可能性があるので、接続が確立するまでconnect()メソッドを繰り返し呼び出す必要があります。

  1. 送信する
  2. 受信
sock.send(b'Hello, server!')
data = sock.recv(1024)

非ブロッキングモードでは、データの利用不可や送信に十分なメモリ容量がない場合に、send()やrecv()メソッドはブロックされずに、すぐにエラーを返すことがあります。

  1. 最後に、完了後はソケット接続を確実に閉じてください。
sock.close()

非同期プログラミングのソケットを作るために入力するためのステップがこれです。非同期動作するソケットは適切に扱うには、マルチスレッド、コールバック関数、イベントループなどのテクニックが必要になることに注意してください。

bannerAds