Вниз
Скачать: CL | DM;

Остановка сервера   Найти похожие ветки 

 
Цукор5   (2010-01-25 17:19) [0]

Создал сервер на блокирующих сокетах. В общем, на начальном этапе, при подключении нового клиента создаю отдельный поток(ClientThread) и обмениваюсь данными с клиентом.
Так вот, а предположим, мне необходимо срочно приоставить сервер.
Делаю так :

shutdown(FServerSocket, SD_BOTH);
closesocket(FServerSocket);


Тем самым, мой слушающий поток(ListenThread), для подключения новых клиентов завершается. Но !!! Как быть с потоками, которые уже созданы и работают(ClientThread) ?
Они не останавливаются )) В них продолжается  обмен. Да и , собственно, я не вижу средств для остановки :
1) в Select смотрел на ExceptFds:PFDSet. Ничего не происходит при закрытии сокета сервера.
2) "вкрутил" бы WaitFor с TEvent (как для обычного RS232 порта). Так некуда. У меня ж Select работает.

Хотел услышать мнения. Как правильно остановить сервер, с работающими потоками-клиентами.
Спасибо!


 
grisme ©   (2010-01-25 20:01) [1]

мм.. наверное, "информация" клиента же хранится где-то? список, динмассив? (подразумеваю хранение там client thread handle, client socket handle и т.п.)
делаем closesocket"ы на все client socket handle"ы и WaitForSingleObject"ы для каждого thread handle. ) ну, как-то так.


 
Цукор5   (2010-01-25 22:33) [2]

Да. Не подумал.
Ну что ж ... спасибо, попробую.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.048 c
2-1330523358
Alex_C
2012-02-29 17:49
2013.03.22
Resize bitmap


2-1342962810
Eliot
2012-07-22 17:13
2013.03.22
Excel&Delphi 7


2-1330981721
Зарубка
2012-03-06 01:08
2013.03.22
Подмена данных в idHtppProxyServer


3-1287641897
dmitry1208197320
2010-10-21 10:18
2013.03.22
Правильность ввода поля при переходе к другой записи


15-1342885937
alexdn
2012-07-21 19:52
2013.03.22
Курсор для сайта




   Наверх