Конференция "Сети" » Остановка сервера [D7, WinXP]
 
  • Цукор5 (25.01.10 17:19) [0]
    Создал сервер на блокирующих сокетах. В общем, на начальном этапе, при подключении нового клиента создаю отдельный поток(ClientThread) и обмениваюсь данными с клиентом.
    Так вот, а предположим, мне необходимо срочно приоставить сервер.
    Делаю так :

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



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

    Хотел услышать мнения. Как правильно остановить сервер, с работающими потоками-клиентами.
    Спасибо!
  • grisme © (25.01.10 20:01) [1]
    мм.. наверное, "информация" клиента же хранится где-то? список, динмассив? (подразумеваю хранение там client thread handle, client socket handle и т.п.)
    делаем closesocket'ы на все client socket handle'ы и WaitForSingleObject'ы для каждого thread handle. ) ну, как-то так.
  • Цукор5 (25.01.10 22:33) [2]
    Да. Не подумал.
    Ну что ж ... спасибо, попробую.
 
Конференция "Сети" » Остановка сервера [D7, WinXP]
Есть новые Нет новых   [134438   +31][b:0][p:0]