| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > TServerSocket ошибка 10053 |
| Автор: dimokx87 22.4.2010, 12:55 |
| Помогите пожалуйста! Использую компонент TServerSocket, подключаются несколько клиентов, всё отлично работает. Но если выключить один из клиентов не разъединив соединение (например через диспетчер задач), то на сервере вылетает ошибка 10053, при этом сервер думает, что тот клиент ещё подключен. Что нужно сделать? |
| Автор: Демо 22.4.2010, 13:51 |
Ну видимо просто обработать эту ошибку (WSAECONNABORTED (10053))? |
| Автор: dimokx87 22.4.2010, 14:05 |
| Подскажи пожалуйста как это сделать. |
| Автор: kami 22.4.2010, 17:46 | ||
Минимальный обработчик события OnError на серверном и клиентском сокете должен состоять из:
|
| Автор: dimokx87 22.4.2010, 19:05 |
| ErrorCode:=0; это у меня и так стоит, а Socket.Close; мне не нужно. Мне нужно, чтобы список пользователей обновился. |
| Автор: kami 22.4.2010, 20:36 | ||
Тогда без комментариев. Только не удивляйтесь, что пошли утечки. При "неправильном" разрыве соединения (прерывание процесса, разрыв соединения с помощью TCPView) "второму концу" это не сообщается. И узнает он о том, что соединение уже не живое только при попытке что-либо отправить в сокет. Именно в этот момент возникнет ошибка, которая должна быть обработана в OnError. Если ошибка все равно "вылезает", значит она не обработана, ибо исключение при ErrorCode=0 не возникает.
В догонку - при ошибке соединения его нужно закрыть установленным порядком. |
| Автор: dimokx87 22.4.2010, 21:00 |
| Не могу понять. Значит закрытие сокета обязательно и придётся очистить список подсоединенных клиентов, а потом подключать всех заново? |
| Автор: dimokx87 22.4.2010, 21:30 |
| Всё работает!!! ОГРОМНОЕ спасибо kami! Как я понял Socket.Close вызывает выполнение disconect. |
| Автор: kami 22.4.2010, 21:41 |
отлично. (мысли в слух: оно могло начать работать еще в http://forum.vingrad.ru/index.php?showtopic=298318&view=findpost&p=2140717 |