Прием TCP-соединений с ровно 2 IP-адресов - PullRequest
2 голосов
/ 22 марта 2012

Я пишу приложение на сервере TCP, используя Winsock.Клиент, который подключается ко мне (для которого у меня нет источника и, следовательно, не может вносить изменения), ведет себя следующим образом: если он подключается, и я закрываю соединение (потому что это нежелательный клиент), он немедленно переподключается.В результате этого я буду безумно крутиться по поводу моих вызовов accept (), если есть клиент, который хочет со мной связаться, но с которым я не хочу разговаривать (то есть то, что я назвал нежелательным клиентом).

Я бы хотел найти способ предотвратить это безумное вращение над моими вызовами accept ().Если бы был только 1 желаемый клиент, я мог бы привязать свой сокет прослушивания к IP-адресу этого клиента, а не к INADDR_ANY.Но увы, есть более 1 желаемого клиента.Насколько я знаю, невозможно разрешить подключения только с набора желаемых IP-адресов, если размер этого набора больше 1.

Я смотрел на WSAAccept.К сожалению, похоже, что это просто сместит безумное вращение к обратному вызову.

Есть ли способ отклонить попытку соединения, которая не включает в себя accept (), пробуждение и возврат (и, следовательно, приводящий ко всему этому)безумный спиннинг)?

1 Ответ

2 голосов
/ 22 марта 2012

Я полагаю, что ваш вопрос уже задавался о стековом потоке в прошлом. Возможно, рассмотрение этих двух тем поможет вам решить вашу проблему:

Если вы боитесь испытать Dos-атаки или проблемы с производительностью, accept действует на уровне 4 стека OSI , который является относительно низким уровнем, который обрабатывает переговоры SYN-ACK с клиентом. поэтому базовое подключение извне, немедленно прерванное после accept (), не вызовет важных проблем с производительностью.

Если, однако, вы абсолютно хотите принять два IP-адреса, я думаю, что вам, возможно, придется использовать либо брандмауэр, либо сокеты RAW, чтобы непосредственно получить IP-адрес из пакета TCP и принять соединение самостоятельно, но это будет, я думаю, огромная потеря времени.

...