우선 제가 작성한 내용은 아래와 같습니다...
procedure TMainForm.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode <> 0 then
ErrorCode:= 0;
Memo1.Lines.Add('[Error]');
ClientSocket1.Active:= False;
ClientSocket1.Close;
ErrTimer.Enabled:= False;
ClientSocket1.Active:=True;
ErrTimer.Enabled:= True;
end;
내용인 즉 통신상태가 불량(제가 한 Test는 LAN Cable을 제거한 상태임)할
경우 ClientSocket1의 Active를 False한뒤 Close한후
다시 재연결을 계속하여 실행하는 것인데 중간에 Error Message가
Display되네요
내용은
"Windows socket error: 대기열이 또는 버퍼가 부족하여 소켓에서
해당작업을 진행하지 못했습니다(10055), on API 'connect'"
좀 도와 주십시요.. 부탁드릴께요.!!!
ClientSocket1.Active:= False; 이렇게 코딩하지 마시고요..
넘어오는 인자인 Socket을 이용해 Socket.Close; 해주세요..
그리고 제가 저번에도 말씀 드렸다시피... 블록킹 소켓이 아니기때문에
위의 코딩은 문제가 있습니다.
Error 이벤트에서 재연결을 설정해주지 마시고요...
Timer를 돌려서 연결 여부를 확인해서...접속하는 식으로 바꾸세요...
연결여부 확인은 변수를 하나 선언하셔서... 연결시 True, Error나 DisConnect시 False로 돌려놓으시고...그 변수가 False이면 연결 시도하고 그 값을 True로 바꾸는 식으로 하시던지...
아니면 Connected라는 속성을 이용하시던지 하세요..