Mam bibliotekę innej firmy, która działa jako serwer HTTP. Przekazuję mu adres i port, który następnie wykorzystuje do nasłuchu połączeń przychodzących. Ta biblioteka słucha w taki sposób, że nie otrzymuje wyłącznego korzystania z portu i adresu, do którego jest przypisana. W rezultacie mogę słuchać tego samego portu wiele razy.Jak sprawdzić, czy port TCP jest już odsłuchiwany?
Potrzebuję uruchomić wiele wystąpień tego serwera HTTP w tym samym procesie. Każda instancja ma domyślny port, ale jeśli ten port nie jest dostępny, powinien użyć następnego dostępnego portu. Tutaj jest mój problem; Mogę skończyć z dwoma serwerami HTTP nasłuchującymi na tym samym porcie.
Nie mogę zmienić kodu serwera HTTP i serwer HTTP nie ostrzeże mnie, jeśli nie może nasłuchiwać na porcie, który mu podaję, więc muszę być w stanie sprawdzić, czy port jest już w użyciu przed uruchomieniem każdego serwera HTTP . Próbowałem sprawdzić, czy port jest już odsłuchiwany przez powiązanie mojego własnego gniazda z ustawieniem SO_REUSEADDR na FALSE i SO_EXCLUSIVEADDRUSE ustawione na TRUE, ale wywołania bind i listen zarówno się powiodą, gdy istniejący serwer HTTP już nasłuchuje na tym porcie.
W jaki sposób ten serwer HTTP osiąga ten efekt i jak dokładnie sprawdzić, czy port jest słuchany w ten sposób?
Czy jest jakiś powód, dla którego musisz korzystać z tej konkretnej biblioteki serwerów HTTP? Biorąc pod uwagę, że jest on uszkodzony i nie masz nad nim wystarczającej kontroli, a nawet dostępu do tego, co robi, aby to zadziałało, przełączanie wydaje się bardzo dobrym pomysłem. – abarnert
Z ciekawości, która to biblioteka? –
"Ta biblioteka słucha w taki sposób, że nie otrzymuje wyłącznego korzystania z portu i adresu, do którego jest przypisana". W TCP nie jest to możliwe. Jedyną formą udostępniania portów, która jest możliwa w TCP, jest powiązanie z różnymi lokalnymi adresami IP i tym samym numerem portu. Musisz ponownie zbadać, a następnie sformułować swoje pytanie. – EJP