TTCPBlockSocket
TCP/IPアプリケーションに使用しています。問題は、接続がいつ失われたかを判断できないことです。
GetLastError
Read
0を返します0を返します
しかし、アプリケーションが接続されている場合、これらの値に遭遇するので、TCP/IP接続が失われたときに通知する方法を取得できます。
ありがとう
TTCPBlockSocket
TCP/IPアプリケーションに使用しています。問題は、接続がいつ失われたかを判断できないことです。
GetLastError
Read
0を返します0を返します
しかし、アプリケーションが接続されている場合、これらの値に遭遇するので、TCP/IP接続が失われたときに通知する方法を取得できます。
ありがとう
つまり、パラメータCanRead
に0を渡して、このメソッドを使用できTimeout
ます。この関数は内部select
でソケットの関数を実行し、エラーが発生するとFalseを返します。接続が失われるとselect
関数が返され、結果としてメソッドがFalseを返すため、このメソッドだけを使用するだけで十分です。したがって、この方法でソケット接続が有効かどうかを確認するだけで十分だと思います。SOCKET_ERROR
CanRead
function IsSocketAlive(ASocket: TTCPBlockSocket): Boolean;
begin
Result := ASocket.CanRead(0);
end;
opC0de が言うように、クライアントがまだ接続されているかどうかを確認するには、TCPBlockSocket.CanRead(0) と TCPBlockSocket.WaitingData = 0 の両方を確認する必要があります
function IsSocketAlive(ASocket: TTCPBlockSocket): Boolean;
begin
Result := (ASocket.Socket = INVALID_SOCKET) or ((ASocket.WaitingData = 0) and ASocket.CanRead(0));
end;
私は自分のプロジェクトでこの方法を使用しているので、それが機能することを確認できます。