임펠리테리입니다.
이쪽 클라이언트 소켓에서 서버쪽으로 접속하려고 하는데 서버의
소켓이 오픈되어있지 않을 경우, 그러니까 말씀하신 것처럼 서버
프로그램이 다운되었거나 아예 실행되어있지 않은 경우에는
ESocketError가 발생합니다.
이것을 막는 방법은 간단합니다. 해당 클라이언트 소켓의 OnError
이벤트의 핸들러에서 ErrorCode를 0으로 세팅해주면 되죠. 이렇게
하면 이벤트 핸들러 내에서 에러 상황이 잘 처리되었다고 알려주는
결과가 됩니다.
그런데, 클라이언트의 에러 이벤트는 연결 실패의 경우 뿐 아니라,
연결되어있다가 끊어진다든지, 혹은 데이터를 주거나 받는 여러 경우에
발생할 수 있습니다. 그러므로, 다음과 같이 연결 시도중에 에러가
발생한 것인지를 검사해주어야 합니다.
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
if(ErrorEvent == eeConnect)
{
ShowMessage("서버와의 연결에 실패하였습니다.");
ErrorCode = 0;
}
}
그럼 도움되시길...
: 안녕하세요.
: 저는 C++Builder 3.0으로 CTI 프로그램을 하고 있는 사람입니다.
: 다름이 아니고
: 제가 FAX respons 프로그램을 하고 있는데
: 제 프로그램은 Client이고 다른쪽에 TM Server가 있습니다.
: 문제는 서버가 다운 되거나 처음 부터 켜져 있지 않았을때
: 제 프로그램에서 error 10061 ESocketError 란 예외현상이
: 발생하더군요.
: ..
: 예전에는
: ClientSocket1->Active = true를 해두면 이런 경우 문제가 없었던 같은데 제가 잘못 알고 있는 것인지....
: 그리고 다른 문제는 서버 프로그램을 내렸다가 다시 살리면
: 처음 내릴때 Disconnect 이벤트는 발생하는데 ..
: 제 접속 하지 않는군요.
:
: (실제로 Unix로 C/S프로그램을 해보면 이런 경우 당연히 Client는 서버가 살때까지 무한 루프지만...)
: 방법이 없을까요.
:
: 도움이 되지 않아도 답장 주시면 감사히 받겠습니다.
: 그럼 안녕
: ......_^^_...........
:
: ---------------------
: | | |
: ---------------------
:
|