私はいくつかの助けが必要です。私はPython 2.5.4をWindows7上で動作させるレガシーソフトウェアを開発しています。ソケット接続でキープアライブを有効にする必要があります。私はあなたがWindows 7で動作するPython 2.5でキープアライブタイマーを設定するには
object.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
使ってPythonでのキープアライブを有効にすることができ、その下のスレッドで見てきた
ただし、この設定はデフォルトのウィンドウが2時間のアライブタイマーを維持し使用しています。
次のAPIを使用してタイマーを設定できることもわかりましたが、Python 2.6以降でのみ使用できます。
sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 10000, 3000))
とにかく私はこのSIO_KEEPALIVE_VALSをpython 2.5.4で設定できますか?私が持っているレガシーコードにはpywin32-214モジュールもあります。私は本当にPythonのバージョンをアップグレードすることはできません。
は、私はまた、あなたの助けのための方法のpython2.6以降の呼び出しのWindows API
int WSAIoctl(
(socket) s, // descriptor identifying a socket
SIO_KEEPALIVE_VALS, // dwIoControlCode
(LPVOID) lpvInBuffer, // pointer to tcp_keepalive struct
(DWORD) cbInBuffer, // length of input buffer
NULL, // output buffer
0, // size of output buffer
(LPDWORD) lpcbBytesReturned, // number of bytes returned
(LPWSAOVERLAPPED) lpOverlapped, // OVERLAPPED structure
(LPWSAOVERLAPPED_COMPLETION_ROUTINE) lpCompletionRoutine, // completion routine
);
感謝を疑問に思います。
参考文献: How to change tcp keepalive timer using python script?
ここhttps://msdn.microsoft.com/en-us/library/dd877220%28v=vs.85%29.aspx
あなたは可能性があるためにコンパイルgithubのhttps://github.com/rawinput/ioctlの小さなPython拡張を作っ
Cでそれを行う方法ですバックポート[sock_ioctl](https://hg.python.org/cpython/file/2.6/Modules/socketmodule.c#l2848)関数Python 2.6から、またはCtypesを使用して[WSAIoctl](https://github.com/twisted/twisted/blob/e38cc25a67747899c6984d6ebaa8d3d134799415/src/twisted/internet/test/_win32ifaces.py#L26)関数を呼び出します。 – cgohlke
こんにちは@cgohlke、あなたの提案に感謝します。しかし、以前はPythonでC/C++を混ぜ合わせてみたことはありませんでした。私はそれを調べ始めるでしょう。あなたが良い参考に何か提案があれば、それは非常に高く評価されるでしょう。どうもありがとう。 – paulp