38

私の Python スクリプトでは、次のコマンドを使用して TCP キープアライブを有効にしました。

x = s.setsockopt( socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

私の目標は、5分間送信(*)がない場合、ソケット接続が閉じられることです。私は Windows で作業していますが、私の python スクリプトはクライアント プログラムにデータを送信するだけで受信していません。

私が知っていることは、デフォルトでは、2 時間送信がない場合、try と except を使用して接続を閉じることができるのは私だけです。Windowsの場合、レジストリに移動することで、この待機時間を手動で短縮できます。しかし、スクリプトから変更できる方法はありますか?

(*) ここでの「送信しない」とは、「何も送信しようとしていない」というよりも、「何かがネットワーク上で静かにパケットを消費している」ことを意味します。

4

2 に答える 2

15

Windows の場合、Python で:

これにより、ソケットのキープアライブが有効になり、キープアライブ時間は 10 秒、キープアライブ間隔は 3 秒になります。

sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000))
于 2015-08-07T01:13:28.980 に答える