Tengo una biblioteca de terceros que actúa como servidor HTTP. Le paso una dirección y un puerto, que luego usa para escuchar las conexiones entrantes. Esta biblioteca escucha de tal manera que no recibe el uso exclusivo del puerto y la dirección a la que está vinculado. Como resultado, puedo escuchar en el mismo puerto varias veces.¿Cómo puedo verificar si ya se está escuchando un puerto TCP?
Necesito ejecutar varias instancias de este servidor HTTP en el mismo proceso. Cada instancia tiene un puerto predeterminado, pero si ese puerto no está disponible, debe usar el siguiente puerto disponible. Aquí es donde está mi problema; Puedo terminar con dos servidores HTTP escuchando en el mismo puerto.
No puedo cambiar el código del servidor HTTP y el servidor HTTP no me alertará si no puede escuchar en el puerto que le doy, así que tengo que poder verificar si un puerto ya está en uso antes de iniciar cada servidor HTTP . He intentado comprobar si ya se está escuchando un puerto vinculando mi propio socket con SO_REUSEADDR configurado en FALSE y SO_EXCLUSIVEADDRUSE establecido en TRUE, pero las llamadas de vinculación y escucha se realizan correctamente cuando un servidor HTTP existente ya está escuchando en ese puerto.
¿Cómo está logrando este efecto este servidor HTTP, y cómo puedo verificar con precisión si un puerto se está escuchando de esta manera?
¿Hay alguna razón por la que tenga que usar esta biblioteca de servidor HTTP en particular? Dado que está roto, y no tienes suficiente control sobre él o incluso acceso para descubrir qué está haciendo para que funcione, cambiar parece una muy buena idea. – abarnert
Por curiosidad, ¿qué biblioteca es? –
"Esta biblioteca escucha de tal manera que no recibe el uso exclusivo del puerto y la dirección a la que está vinculado". Eso no es posible en TCP. La única forma de compartir puertos que es posible en TCP es vinculante para diferentes direcciones IP locales y el mismo número de puerto. Necesita volver a investigar y luego reformular su pregunta. – EJP