ОБНОВЛЕНИЕ: После исследования lil больше я нашел реальную проблему для этого поведения. Проблема в том, что я создаю потоки для каждого соединения и передаю носок fd в поток, но не сразу pthraed_joining, так что мой основной поток не смог создать больше потоков после принятия соединения. и моя логика закрытия сокета в дочернем потоке, потому что я не смог закрыть сокет и, следовательно, они собирались в состояние WAIT CLOSE. Я просто отделил потоки после их создания, и все работает хорошо!Розетки не закрываются после 32739 соединений
У меня есть программа клиентского сервера, я использую скрипт для запуска клиента и создания максимально возможного соединения и закрытия их после отправки строки данных и выхода из клиента, все работает нормально до 32739-го соединения, т.е. соединение закрывается с обеих сторон, и все, но после этого номера соединение не получает закрыт и сервер прекращает принимать новые соединения, и если сделать
netstat -tonpa 2>&1 | grep CLOSE
Я вижу около 1020 сокетов, ожидающих ЗАКРЫТЬ. образец из команды,
tcp 25 0 192.168.0.175:16099 192.168.0.175:41704 CLOSE_WAIT 5250/./bl_manager off (0.00/0/0)
tcp 24 0 192.168.0.175:16099 192.168.0.175:41585 CLOSE_WAIT 5250/./bl_manager off (0.00/0/0)
tcp 30 0 192.168.0.175:16099 192.168.0.175:41679 CLOSE_WAIT 5250/./bl_manager off (0.00/0/0)
tcp 31 0 192.168.0.175:16099 192.168.0.175:41339 CLOSE_WAIT 5250/./bl_manager off (0.00/0/0)
tcp 25 0 192.168.0.175:16099 192.168.0.175:41760 CLOSE_WAIT 5250/./bl_manager off (0.00/0/0)
Я использую следующий код, чтобы обнаружить отключение клиента.
for(fd = 0; fd <= fd_max; fd++) {
if(FD_ISSET(fd, &testfds)) {
if (fd == client_fd) {
ioctl(fd, FIONREAD, &nread);
if(nread == 0) {
FD_CLR(fd, &readfds);
close(fd);
return 0;
}
}
}
} /* for()*/
Пожалуйста, дайте мне знать, если что-то не так. Это настройка клиента Python и CPP.
спасибо
На какой платформе вы работаете? Кроме того, почему этот помеченный Python? У вас есть основания полагать, что клиент делает что-то своеобразное с сокетами, которые препятствуют работе вашего сервера? – abarnert
Да, я сомневался в этом! – bana