![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как подавить ошибку подключения ClientSocket
Layner © (2008-05-16 09:36:00)Есть ClientSocket / ServerSocket. Если ServerSocket не запущен, в приложении ClientSocket выдает ошибку 10061. Как ее подавить? Ставил
ClientSocket1.Address := '192.168.0.1'
ClientSocket1.Port := 1010;
try
ClientSocket1.Active := True
except
//сюда не попадаю!
end;
Наверное на OnError надо отлавливать? Подскажите пожалуста ;)
kami (2008-05-18 21:21:00) [1]То есть, WSAENOBUFS возникнет при долгой (либо очень активной) работе приложения, создающего гнезда в неумеренных количествах.
Понял, спасибо.
Сергей М. (2008-05-18 14:12:00) [2]Это объясняется логикой, реализованной в самом компоненте, точнее - в классе TCusomWinSocket.
Почему Борланд автоматически не закрывает сокет при возникшей в ходе коннекта ошибке, я не знаю, но это факт. Возможно, Борланд все же руководствовалась при этом какими-то резонными соображениями.
Количество одновременно существующих сокетов в контексте одного процесса - величина, имеющая предел, зависящий от ресурсов, которые система может выделить процессу при тех или иных условиях. Закрытие сокета ведет к освобождению ассоциированных с ним ресурсов, незакрытие, соответственно, к неосвобождению.
kami (2008-05-17 21:05:00) [3]Сергей М. © (16.05.08 10:54) [4]
> Будет устраивать до тех пор, пока не получишь ошибку WSAENOBUFS.
> А рано или поздно ты ее получишь обязательно.
Сергей, а почему (в смысле - в результате чего, "почему" написано в MSDN) может возникнуть эта ошибка?
Layner (2008-05-16 13:24:00) [4]Сергей, спасибо!
Сергей М. (2008-05-16 10:54:00) [5]
> вставил ErrorCode := 0; все устраивает.
Будет устраивать до тех пор, пока не получишь ошибку WSAENOBUFS.
А рано или поздно ты ее получишь обязательно.
Минимальный обработчик ошибки коннекта кроме вышеупомянутой строчки должна включать еще одну строчку:
Socket.Close;
В противном случае происходит утечка ресурсов, связанных с теряемым дескриптора гнезда
Layner (2008-05-16 09:56:00) [6]Reindeer Moss Eater Спасибо огромное за ответ!!!
в OnError вставил ErrorCode := 0;все устраивает.
Reindeer Moss Eater (2008-05-16 09:49:00) [7]На OnError не пробовал F1 нажать?
Layner (2008-05-16 09:38:00) [8]Вернее, ошибку то отлавливать, но не выдавать в приложении системную модальную ошибку, а для себя ее записать в журнал и дальше работать.