Socket 接続ステータスをどのように判別するか。

Pythonでは、ソケットを作成・管理するにはsocketモジュールを使用できます。ソケット接続の状態を確認するにはgetsockoptメソッドを用いてソケットオプションの値を取得します。手順は次の通りです。

  1. ソケットをインポートします
  2. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  3. AF_INETはIPv4アドレスファミリを、SOCK_STREAMはTCPプロトコルを用いることを示します。
  4. setTimeout
  5. s.setTimeout(5)
  6. タイムアウト時間を5秒間に設定していますが、実際の状況に応じて調整してください。
  7. 接続する
  8. s.connect((‘遠隔ホストIP’, 遠隔ホストポート))
  9. リモートホストIPとリモートホストポートを実IPアドレスとポートに置き換える。
  10. getsockoptをネイティブに日本語で言い換えると、「ソケットオプションを取得する」となる。
  11. s.getsockopt(ソケット.SOL_SOCKET, ソケット.SO_KEEPALIVE)
  12. SOL_SOCKETはソケットオプションのレベルを表し、SO_KEEPALIVEは取得するオプションを表す。
  13. 返り値が 0 の場合、正常に接続されています。返り値が 1 の場合、接続が閉じられています。
  14. 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メソッドを使用してタイムアウト時間を設定すると、接続が長い時間ブロックされるのを防ぎます。

bannerAds