Socket 接続ステータスをどのように判別するか。
Pythonでは、ソケットを作成・管理するにはsocketモジュールを使用できます。ソケット接続の状態を確認するにはgetsockoptメソッドを用いてソケットオプションの値を取得します。手順は次の通りです。
- ソケットをインポートします
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- AF_INETはIPv4アドレスファミリを、SOCK_STREAMはTCPプロトコルを用いることを示します。
- setTimeout
- s.setTimeout(5)
- タイムアウト時間を5秒間に設定していますが、実際の状況に応じて調整してください。
- 接続する
- s.connect((‘遠隔ホストIP’, 遠隔ホストポート))
- リモートホストIPとリモートホストポートを実IPアドレスとポートに置き換える。
- getsockoptをネイティブに日本語で言い換えると、「ソケットオプションを取得する」となる。
- s.getsockopt(ソケット.SOL_SOCKET, ソケット.SO_KEEPALIVE)
- SOL_SOCKETはソケットオプションのレベルを表し、SO_KEEPALIVEは取得するオプションを表す。
- 返り値が 0 の場合、正常に接続されています。返り値が 1 の場合、接続が閉じられています。
- s.閉じる()
サンプルコードの全体はこちら。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
s.connect(('远程主机IP', 远程主机端口))
status = s.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE)
s.close()
if status == 0:
print("连接正常")
else:
print("连接已关闭")
実際のIPアドレスとポートに、上記のコード内のリモートホストのIPとリモートホストのポートを置きかえる必要があります。さらに、setTimeoutメソッドを使用してタイムアウト時間を設定すると、接続が長い時間ブロックされるのを防ぎます。