Indy 10 и Socket Error #10054
, Как не допустить закрытие сокета?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.136] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Indy 10 и Socket Error #10054
, Как не допустить закрытие сокета?
|
|
|
|
|
Притащил проект домой, думал на выходных пару часов поковырять но появилась странная ошибка Socket Error #10054 при попытке принять (скачать) файл с FTP ресурса.
По ошибке 10054 вот что нашел: WSAECONNRESET (10054) Connection reset by peer. An existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, or the remote host uses a hard close (see setsockopt for more information on the SO_LINGER option on the remote socket.) This error may also result if a connection was broken due to keep-alive activity detecting a failure while one or more operations are in progress. Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET. Проще говоря сокет закрывается по непонятным мне причинам со стороны сервера. Причём к моменту окончания описания этой проблемы я проверил еще раз получение файла разных размеров и все прошло без ошибок... Вобщем я вообще не понял почему такое случилось... И как можно этого избежать в дальнейшем? |
|
Сообщ.
#2
,
|
|
|
|
Для себя придумал два способа:
1) это принудительно удерживать соединения по таймеру отправляя пустую команду NOOP Также работают подавляющее большинство ФТП клиентов с функцией KEEPALIVE. 2) это собственно проверка а не закрыл ли сервер сокет без уведомления нас. ![]() ![]() function IfDisconnect: Boolean; begin try IdFTP1.SendCmd('NOOP'); Result := True; //Есть соединение except Result := False; //Нет соединения end; end; Как видно все банально просто, но если кто знает другое решение то поделитесь. |
|
Сообщ.
#3
,
|
|
|
|
Хм... А если попробовать что-то вроде IdFTP1.Socket.Close; ?))
|
|
Сообщ.
#4
,
|
|
|
|
M AutoBOT, убедительная просьба впредь не поднимать старых тем, особенно тех, что помечены "Вопрос решен". Внимательно смотрите на дату последнего сообщения. |