Ho una libreria di terze parti che funge da server HTTP. Gli passo un indirizzo e una porta, che poi usa per ascoltare le connessioni in entrata. Questa libreria ascolta in modo tale da non ricevere l'uso esclusivo della porta e dell'indirizzo a cui è destinata. Di conseguenza, posso ascoltare sulla stessa porta più volte.Come si verifica se una porta TCP è già in ascolto?
Ho bisogno di eseguire più istanze di questo server HTTP nello stesso processo. Ogni istanza ha una porta predefinita, ma se quella porta non è disponibile, dovrebbe utilizzare la successiva porta disponibile. Questo è il mio problema; Posso finire con due server HTTP in ascolto sulla stessa porta.
Non riesco a cambiare il codice del server HTTP e il server HTTP non mi avviserà se non è in grado di ascoltare sulla porta che gli ho dato, quindi devo essere in grado di verificare se una porta è già in uso prima di avviare ogni server HTTP . Ho provato a verificare se una porta è già in ascolto collegando il mio socket con SO_REUSEADDR impostato su FALSE e SO_EXCLUSIVEADDRUSE impostato su TRUE, ma le chiamate di bind e di ascolto hanno esito positivo quando un server HTTP esistente è già in ascolto su quella porta.
In che modo questo server HTTP raggiunge questo effetto e come posso controllare accuratamente se una porta viene ascoltata in questo modo?
C'è un motivo per utilizzare questa particolare libreria di server HTTP? Dato che è rotto, e non hai abbastanza controllo su di esso o accesso per capire cosa sta facendo per farlo funzionare, il passaggio sembrerebbe una buona idea. – abarnert
Per curiosità, quale libreria è? –
"Questa libreria ascolta in modo tale da non ricevere l'uso esclusivo della porta e dell'indirizzo a cui è associato". Questo non è possibile in TCP. L'unica forma di condivisione delle porte che è possibile in TCP è vincolante per diversi indirizzi IP locali e lo stesso numero di porta. È necessario riesaminare e quindi riformulare la domanda. – EJP