Здравствуйте, Ahven, Вы писали:
A>Коллеги, ситуация такая. A>Есть сервер на блокирующих сокетах, один клиент — один поток, т.е. с каждым клиентским потоком связан сокет, который дает ф-я accept. A>Поскольку сокеты блокирующие, большую часть времени они сидят на recv. A>Когда сервер заканчивает свою работу, он должен закрыть все эти сокеты. A>Я пока делаю так — при завершении главного потока пробегаюсь по списку клиентских потоков, ставлю им признак завершения потока и вызываю closesocket для соотв. сокетов. При этом recv завершается с ошибкой WSAECONNRESET. При обработке ошибок я считаю, что если поставлен признак завершения потока и ошибка WSAECONNRESET, то это рассматривается как "сервер вырубают" и ошибкой это не считается. A>Вопрос — допустимо ли так делать (т.е. закрывать сокет, принадлежащий одному потоку, из другого). Конечно, можно вызывать не closesocket, а shutdown(fSocket, SD_BOTH), но принцип остается тем же. Может быть, есть способ получше? Как вообще правильно делать по науке?
Вот кусок кода кодорый закрывает сокет...работает корректно...
У меня при попытке закрыть из другого потока на прямую оставался какой то нейзвестный поток
очевидно именно от TSocket не было времени разбирпться......