Название: сокеты и потоки Отправлено: frau muller от Апрель 28, 2004, 11:14 в дочернем потоке вызываю функцию accept для сокета:
clSock = accept(sock,(sockaddr*)&from, &fromlen); если не ошибаюсь, accept вешает выполнение потока, пока не поступит запрос от клиентского сокета. Проблема такая: могу остановить выполнение потока только функцией TerminateThread, ExitThread в данном случае не работает. А как корректно завершить поток? Название: сокеты и потоки Отправлено: ods от Апрель 28, 2004, 12:19 man 7 socket, man 2 fcntl на предмет установки O_NONBLOCK
man 2 select, man 2 poll Название: сокеты и потоки Отправлено: npak от Апрель 28, 2004, 14:04 Цитата: "ods" man 7 socket, man 2 fcntl на предмет установки O_NONBLOCK man 2 select, man 2 poll Судя по первому постингу, это Винда. Там нет ни fcntl, ни poll. Смотри в MSDN про nonblocking socket (в частности, WSPIoctl) Если нужна переносимость, то можно воспользоваться select. Название: сокеты и потоки Отправлено: Злой от Апрель 28, 2004, 21:30 Делаешь в основном потоке closesoket, после чего с помощью WaitForSingleObject ждешь завершения работы дочернего потока. В дочернем потоке функция accept после того, как где-нибудь данный сокет был закрыт, возвращает управление. Проверяешь код ошибки и, в зависимости от его значения, завершаешь работу потока или делаешь ещё что-нибудь (тебе, как автору программы, виднее, что именно).
|