ソケットから読み取ることができるデータの量を FIONREAD で判定する
ソケットに読み取り可能なデータがあるかどうか判定するには、ソケットの読み込み可能を確認するために`select`または`poll`関数が使用できます。`select`関数を使用したサンプルコードを次に示します。
“`python
import socket
# ソケットオブジェクトの作成
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# サーバーへ接続
s.connect((“example.com”, 80))
# select関数を用いてソケットの読み込み可能を確認
readable, writable, exceptional = select.select([s], [], [], 0)
# ソケットの読み込み可能判定および読み込み可能データ数の取得
if s in readable:
data = s.recv(4096)
data_length = len(data)
print(“読み込み可能データ数:{}”.format(data_length))
# ソケット接続のクローズ
s.close()
“`
このサンプルコードでは、まずソケットオブジェクトが作成され、サーバーに接続されます。その後、`select`関数を使用してソケットの読み込み可能が確認されます。ソケットが読み込み可能である場合、`recv`メソッドを使用してデータを受信し、`len`関数を使用してデータ長の取得が行われます。このデータ長が読み込み可能データ数になります。最後に、ソケット接続がクローズされます。