Клиент зависает после pthread_exit() в потоке сервера в C
У меня есть сервер, на котором я работаю с несколькими клиентами. Каждый клиент, который подключается к нему, обслуживается в своем собственном потоке. Теперь, если какие-либо ошибки происходят на стороне сервера, я хочу выйти из этого потока, вызвав pthread_exit, и завершить работу клиента, который обслуживался этим потоком. Тем не мение; когда я пытаюсь это сделать, мой клиент зависает. Кроме того, это приводит к зависанию других клиентов, которые находятся в разных потоках. Я вызвал pthread_exit в случайном месте, чтобы проверить это...
1 ответ
Скорее всего, проблема в том, что вы не вызываете close(newsockfd) перед вызовом pthread_exit(). Если это так, то ваш серверный поток пропадает, но сокет, который он использовал для связи с клиентом, остается открытым, даже если сервер больше с ним ничего не делает. Затем исходящий TCP-буфер клиента заполняется, и клиент бесконечно ждет, пока сервер recv() получит больше данных из сокета, чего никогда не происходит.