То, что вы просите, просто невозможно на стороне сервера. Нет просто никакого способа отклонить ожидающее соединение, пока оно все еще находится в очереди и ожидает его принятия. Вы можете (и должны) установить значение backlog равным 1 при вызове listen()
, но это просто означает, что в очереди может быть не более 1 соединения, пока вы активно общаетесь с другим клиентом. Вам нужно будет вызвать accept()
, чтобы удалить это ожидающее соединение из очереди, а затем немедленно вызвать closesocket()
, если вы не хотите разговаривать с этим клиентом в то время.
Вместо этого вы можете вызвать WSAAccept()
вместо accept()
, чтобы вы могли назначить функцию обратного вызова, которая при необходимости возвращает CF_REJECT
или CF_ACCEPT
, а затем вам нужно постоянно вызывать WSAAccept()
, либо в поток или с перекрывающимся вводом-выводом, чтобы удалить ожидающие соединения из очереди и отклонить их, пока вы общаетесь с принятым соединением, пока не закроете его.