У меня есть приложение Delphi, использующее компоненты Indy HTTP (которое использует сокет Windows).И время от времени я получаю сообщение об ошибке # 10060 (WSAETIMEDOUT - попытка установить тайм-аут соединения без установления соединения) при выполнении процедуры Indy:
CheckForSocketError(IdWinsock2.Connect(ASocket, @LAddr, SizeOf(LAddr)));
...
connect : TconnectProc;
...
TconnectProc = function ( const s: TSocket; const name: PSockAddr; const namelen: Integer): Integer; stdcall;
На самом деле все это просто обтекание Windows connectфункция https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect, которая выдает ошибку и сообщение WSAETIMEDOUT.Итак, мой вопрос - это вообще может быть ошибка программирования?Даже если у меня есть сервер, работающий на другом компьютере, и даже у этого сервера возникают проблемы с обслуживанием запроса, даже в таких случаях низкоуровневое соединение должно работать нормально, если сервер не может обслуживать запрос GET / POST, тогда, конечно, ошибкидолжно быть, но эти ошибки должны возникать только во время выполнения других функций Socket, не входящих в функцию connect
, не так ли?
Я пытаюсь решить мою проблему https://serverfault.com/questions/973648/is-it-possible-that-unencrypted-traffic-can-cause-windows-socket-10057-10060?noredirect=1#comment1266907_973648, и теперь яЯ ищу, что происходит в моем коде.
Мой код на стороне сервера очень прост - это просто компонент TIdHttpServer с внедренным (я предоставляю имя события только здесь):
MyForm.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
Итак - чтоможет быть проблема с моей реализацией, что может привести к появлению WSAETIMEDOUT
для connect
?Да, моя процедура иногда может быть долгой, но он годами возвращал ответ успешно и не было ошибок связи.И я полагаю, что функция соединения может даже не зависеть (не использовать / повышать) событие OnCommandGet, поэтому я не имею никакого контроля над тем, как серверная сторона обрабатывает функцию сокета от клиента?
Возможно, это связано с поддержанием активности TCP (не HTTP), возможно, некоторые обновления Windows сократили клиентские настройки поддержки активности Windows TCP для клиентов, и теперь это проявляется в такой ошибке.