![]() |
![]() |
frau muller 28.04.2004 - 12:06 |
в дочернем потоке вызываю функцию accept для сокета: clSock = accept(sock,(sockaddr*)&from, &fromlen); если не ошибаюсь, accept вешает выполнение потока, пока не поступит запрос от клиентского сокета. Проблема такая: могу остановить выполнение потока только функцией TerminateThread, ExitThread в данном случае не работает. А как корректно завершить поток? |
UE 1 - 28.04.2004 - 12:10 | попробуй из другого потока вызвать closesocket(sock), тогда, afair, accept выйдет из состояния ожидания. |
A1 2 - 06.05.2004 - 10:43 | А как быть с функцией recv? Она ведь тоже ждет получения данных и вешает поток? |
? 3 - 06.05.2004 - 12:20 |
а зачем вызывать accept если событее пока такое не пришло? или recv? если нет данных в буфере. проверяй событя и потом если оно появляется то вызывай либой accept либо recv... |
ste 4 - 06.05.2004 - 15:11 |
>3 Сервер-то на accepte висит, чего проверять? И какой буфер ты собрался проверять без вызова accepta предварительно? |
? 5 - 06.05.2004 - 21:22 | вообще то когда речь шла о буфере то имелся ввиду recv, прочти внимательнее, а насчёт accept'a ты сразу заходишь в поток и сразу вызываешь accept?? или как?? |
ste 6 - 06.05.2004 - 21:36 |
>5 Почитай тему внимательнее. Если ты имеешь ввиду recv, то причем здесь accept? Когда доходит дело до recv, то accept уже пройдет, выполнение продолжается и идет работа с конкретным подключением. А человек имел ввиду, что он висит на accepte в потоке и ему из другого потока это дело надо прервать. |
? 7 - 07.05.2004 - 06:44 |
(to 5) речь зашла о recv как о примере, что бы человеку было понятней, читай внимательнее, ты мне отвечаешь не тот вопрос, я тебя спрашиваю не про поток обработки сокета который возвращается accept'ом, а про слушающий сокет, допустим создали мы слушайщий сокет, как ты себе представляешь дальнейшие действия? как ты обрабатываешь работу слушающего сокета в потоке? при каких условиях ты вызываешь accept? |
ste 8 - 07.05.2004 - 10:39 |
Какие условия? Создал сокет, привязал к адресу, выполнил listen и в цикле делаешь accept. А ты еще что-то делаешь до accepta? Нет, ты можешь, конечно, делать select или poll перед этим, но это НУЖНО только в редких случаях. |
? 9 - 07.05.2004 - 12:01 | вот те самые условия, для нормальной обработки потока не надо вызывать accept постоянно, ты сначало проверь на событее, можешь через WSAEnumNetworkEvents если присутствует событее FD_ACCEPT вот тогда и вызывай accept, тогда и поток зависать не будит, и завершить ты его сможешь корректно. |
frau muller 10 - 07.05.2004 - 14:24 |
клиент связывается с сокетом с помощью connect, далее вызываю shutdown. после этого клиент вызывает connect с теми же параметрами, что и в первом случае, но connect возвращает ошибку. в чем тут дело может быть? |
frau muller 11 - 07.05.2004 - 14:36 | shutdown вызываю для клиентского сокета |