•  

ГлавнаяIndyЧастые вопросы по Indy → IdUDPServer при завершении работы ошибка Socket Error # 10004 Interrupted system call

Создано: 17.05.2014 18:12:50 · Исправлено: 17.05.2014 18:12:50 · Прочтений: 1116

Здравствуйте.
Возникла проблема при испольховании IdUDPServerа. (Indy 10, D2005) При завершении работы постоянно выдает ошибку Socket Error # 10004 Interrupted system call.
Данная тема раннее уже поднималась, но ответа как это исправить небыло.

procedure TForm1.Button1Click(Sender: TObject);
begin
idudpserver1.DefaultPort:=1234;
idudpserver1.Active:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
idudpserver1.Active:=false;
end;


Подскажите, в чем я ошибся
А ни в чём. Это вроде как нормальное поведение. Вот что выдал Google:
http://newsgroups.cryer.info/borland/public.delphi.internet.winsock/200711/07110212546.html
http://www.fredshack.com/docs/indy.html
Я так понимаю, что причина кроется в том, что сокеты блокирующие и пока мы ждём в TIdUDPListenerThread.Run возврата из WSRecvFrom, в главном потоке вызывается CloseSocket, что приводит к ошибке на сокете которую CheckForSocketError зачем-то превращает в исключение. Почему нельзя было написать if not Stopped then..., после ByteCount := GStack.WSRecvFrom... (или как там в последних версиях, а то я Indy не пользуюсь) мне совершенно непонятно.
Уйти от этой ошибки удалось лишь добавив EIdSocketError в Tools -> Options... -> Debugger Options -> CodeGear Debuggers -> Language Exceptions