demon051, Вад, когда я в своё время ковырялся с данным вопросом, обнаружил, что длина очереди N, указанная в listen - это возможность одновременного подключения сразу N сокетов, это не ограничение на общее количество подключений. То есть, даже при значении "1" слушалка всё равно будет принимать запросы на подключение (в виндовом просмотрщике портов висит LISTENING сокет)
решение: при достижении N подключений нужно отключать слушающий сокет. Как только хотя бы одно соединение отпало, слушалку запускаем.
Если по каким-то причинам не хочется прибивать слушалку, то нужно делать Accept для "лишних" входящих, а затем их тут же Close
Прикрутил я вот какой костыль...
значит сначала делаем listen(listener, 1)
затем в select ждем подключения. потом accept и так далее.
а когда установили связь по сокету, вызываем listen(listener, 0) !!!!
всё. дальнейшие попытки подключения невозможны. правда настолько невозможны, что подключающийся следующий клиент впадает в ступор. ну видимо до таймаута соответствующего.
но в общем, это дело клиента, просечь, что почему-то он не может подключиться... на то он и костыль, чтобы не всё так просто было
надо только корректно отрабатывать отключение первого клиента, после чего снова вызывать listen(listener, 1)
Погонял немного. Вроде работает. Но, посмотрим, как к этому отнесется критически настроенная братва
Т.е. эксплуататоры