TsgcTCPClient › 이벤트 › OnError
TCP 연결에서 치명적이지 않은 오류가 보고될 때마다 발생합니다.
property OnError: TsgcWSErrorEvent;
// TsgcWSErrorEvent = procedure(Connection: TsgcWSConnection; const Error: string) of object
—
OnError는 실패한 TLS 핸드셰이크, 하트비트 시간 초과, 또는 수신된 페이로드를 디스패치하는 동안 발생한 오류와 같이, TCP 소켓에서 데이터를 보내거나 받는 동안 감지된 전송 수준의 문제를 보고합니다. Error 매개변수에는 실패에 대한 텍스트 설명이 포함됩니다. Connection 매개변수는 영향을 받은 세션을 식별합니다. 처리되지 않은 예외(소켓 오류, access violation...)에는 대신 OnException을 사용하십시오. Connection이 지정된 경우, 옵션과 관계없이 컴포넌트는 OnError가 발생한 후 해당 연결을 닫습니다. 이때 핸들러는 보통 이미 반환된 상태이지만, NotifyEvents가 neAsynchronous로 설정되어 있으면 보조 스레드에서 발생한 오류가 메인 스레드로 큐에 들어가므로 해당 핸들러는 연결이 닫힌 후에 실행될 수 있습니다. Connection이 nil이면 아무것도 닫히지 않습니다.
OnError는 Connection = nil로도 발생할 수 있으므로, 핸들러는 Connection을 사용하기 전에 반드시 확인해야 합니다. WriteData와 WriteAndWaitData는 클라이언트가 연결되지 않아 메시지를 보낼 수 없을 때 이런 방식으로 보고합니다. 이때 Error 매개변수는 Data not sent, the client is not connected or its handshake has not completed.(resourcestring S_ERROR_CLIENT_NOT_CONNECTED)가 되며, 이벤트는 메서드가 반환되기 전에 해당 메서드를 호출한 스레드에서 발생합니다. 클라이언트가 재연결한 후 쓰기가 실패한 경우에도 Connection = nil로 보고되므로 새 연결은 닫히지 않습니다. 전송할 수 없었던 메시지에 대한 보고를 비활성화하려면 코드에서 Options.RaiseDisconnectExceptions를 False로 설정하십시오.
procedure OnError(Connection: TsgcWSConnection; const Error: string);
begin
WriteLn('#error: ' + Error);
end;