[질문] 인터넷 접속시 timeout 에러처리는 어떻게 ?
========
폼에
//NMDayTime1(날짜와 시간을 가져 올 수 있는 fastNet 파레트에서) 과 버턴, edit박스 등을 추가한 후
// 아래와 같이 코딩한 후에 인터넷 접속시도 시 tomeout 에러처리에 대하여 궁금합니다. (컴이 인터넷에서 끊어 졌다든지, 기타 이유로 해서 연결이 안될 때)
procedure TForm2.Button1Click(Sender: TObject);
begin
//
NMDayTime1.ReportLevel := Status_Basic;
NMDayTime1.TimeOut := 5000;
NMDayTime1.Host := 'time.kriss.re.kr'; // 타임서버
Edit3.Text := NMDayTime1.DayTimeStr;
end;
// 이 부분에서 에러가 발생합니다.
// 인터넷에 현재 내 컴퓨터가 연결되어 있지 않을 경우에 ESockError가 발생하면서
// 프로그램이 이상 종료 되는데, 5초동안
// 접속을 시도 했다가 현재 컴이 인터넷에 연결이
// 안되었더라도 에러가 발생하지 않게 하려면 어떻게 해야 합니까?
// 그리고, 만약 에러가 발생했다고 하더라도 어떻게 처리하면 되나요 ?
// 고견 부탁드립니다.
// 도움말에는 OnError 이벤트 핸들러를 만들고 ErrorCode 파라메타를 0 으로 하면
// 소켓에러가 발생하는 것을 막을 수 있다고 하는데, 잘 모르겠습니다.
//
// 전문가 분의 고견 부탁드립니다.
// 이하 영문 도움말
Write an OnError event handler to respond to errors that arise with the socket connection. Set the ErrorCode parameter to 0 if the OnError event handler successfully deals with the error condition, to prevent an ESocketError from being raised.
===============
흠. 전 TNMDayTime 은 써본적이 없습니다만 TTimer 를 추천합니다.
글구, 직접 VCL 코드를 뒤져 확인해 보지 않았지만..^^;;;
ESockError가 발생하는 시점이 Socket 의 Connection 이 종료되지 않은 시점이라고 하더군여. 따라서 ESocketError 가 발생한 시점에 같은 Port Number 로 새로운 Connection 을 열면 기존의 Connection 이 채 닫히지 않게 되어 에러가 발생한다고 하더군여.
결론은 OnError 함수에서 ErrorCode 파라메타를 0 으로 하고서 소켓이 종료될 충분한 시간을 준 후에 타이머를 돌려 다시 접속을 시도하세요.
즐푸하세여..
타락천사..