Według mojej wiedzy, nie tak działa TCP. Wywołanie accept(..)
zawsze będzie zwracane wraz ze szczegółami klienta. Jest nie sposób na zerknąć na połączenie i wybiórczo odmówić.
Sposób, w jaki robisz to teraz, jest właściwie poprawny: zaakceptuj, a następnie zamknij. Jeśli masz inną strukturę wiadomości poza tą warstwą, możesz utworzyć niestandardową wiadomość "Odrzuć". Ta opcja całkowicie zależy od twojego przypadku użycia.
Jeśli szukasz odrzucenia na podstawie adresu IP, nie znajduje się on w domenie Twoich aplikacji. To jest zadanie twojej zapory ogniowej (jak mówi @Bart Friederichs). W ten sposób żądanie nie dotknie nawet stosu TCP.
Właściwie chcę ściśle jedno połączenie tylko na tym konkretnym porcie. Każde inne połączenie powinno zakończyć się niepowodzeniem w bardzo oczywisty sposób.
Nie pozwól, aby zaakceptować połączenie w twoim strumieniu sterowania. Tylko wtedy, gdy czekasz na accept
, twój program czeka na połączenie z gniazdem, nigdy inaczej.
natychmiast zaakceptuj i zamknij –
@BartFriederichs: to właśnie teraz robię, ale czy istnieje sposób, aby odmówić go bardziej konkretnie? – c00kiemonster
Na podstawie tego, co byś odmówił? Powiedziałbym, że to, co chcesz, jest zadaniem firewalla. Większość aplikacji, o których wiem, że pracują z czarną listą, zaakceptowałaby i zamknęła. –