Durante l'iterazione dei descrittori di file socket, come è possibile verificare se uno di essi proviene da un socket passivo (in ascolto di connessioni)?Verificare se il socket è in ascolto in C
risposta
Questo può essere verificato con getsockopt (SO_ACCEPTCONN). Ad esempio:
#include <sys/socket.h>
int val;
socklen_t len = sizeof(val);
if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &val, &len) == -1)
printf("fd %d is not a socket\n", fd);
else if (val)
printf("fd %d is a listening socket\n", fd);
else
printf("fd %d is a non-listening socket\n", fd);
Non si può davvero dire. Devi tenerne traccia da solo, e quando vuoi controllare se una presa è la presa di ascolto, confronta quella che hai salvato.
È possibile eseguire nella riga di comando (in un ambiente Mac/Linux):
lsof -i
e/o (Linux/Mac/Windows ambiente)
netstat -a
Ha chiesto una soluzione C (non ero giù). – peterh
A rigor di termini, si potrebbe prova ad eseguire un'operazione sul socket che determinerebbe incidentalmente quale tipo di socket è, come provare ad accettare una connessione da esso. Se accept()
non riesce con EINVAL, è un buon segno che non sta ascoltando. :)
Tenere traccia di quali prese sono che è una soluzione migliore nel complesso, però. A meno che tu non stia creando un'applicazione davvero banale, è probabile che dovrai comunque mantenere una sorta di dati aggiuntivi su ogni socket.
- 1. Come verificare se un socket è collegato/disconnesso in C#?
- 2. Come verificare se il socket è chiuso in Boost.Asio?
- 3. Python Socket Ascolto
- 4. Chiudi socket di ascolto in thread python
- 5. Come verificare se il socket è ancora connesso?
- 6. Ascolto se il cookie è stato modificato
- 7. Come posso verificare se un socket è ancora aperto?
- 8. Verificare se i dati sono disponibili nei socket in python
- 9. In nodejs, come posso controllare se una porta è in ascolto o in uso
- 10. Come verificare se il file esiste in Qt in C++
- 11. Come sapere se il socket è aperto in PHP?
- 12. Come verificare se è installato un servizio Windows in C#
- 13. Come verificare se un file è già aperto in C
- 14. Verificare se la funzione è in C o Lua implementata
- 15. Verificare se un punto è in un rettangolo ruotato (C#)
- 16. Come verificare se un tipo è una stringa in C#?
- 17. Come verificare se array vuoto in C
- 18. Chi è connesso su Socket in C
- 19. Verificare se un valore è definito in un C enum?
- 20. Come verificare se la directory è nascosta in C#?
- 21. Come verificare se una DLL COM è registrata in C#
- 22. Verificare se l'oggetto è di tipo generico in C#
- 23. Come posso verificare se un IP è attivo in java?
- 24. Verificare se il thread corrente è thread principale, in Python
- 25. Come si verifica se una porta TCP è già in ascolto?
- 26. Come verificare se il numero è NaN
- 27. Come verificare se il GUID è zero
- 28. Verificare se la funzione è dichiarata con il preprocessore C?
- 29. Verificare se ResultSet è vuoto in Java
- 30. Verificare se patogen è installato in vimrc
Sì, stavo solo pensando di aggiungerlo a un set di descrittori di file e usarlo per verificare. Grazie per la risposta! –
'getsockopt (SOL_SOCKET, SO_ACCEPTCONN)' è il modo corretto per controllare un socket per l'ascolto. Dovresti accettare invece la risposta di mark4o. –
@RemyLebeau Non lo sapevo. Mentre potrebbe essere più codice, ma si adatta meglio alla domanda dell'OP. –