Al recorrer los descriptores de archivos de socket, ¿cómo puedo verificar si uno de ellos es de un socket pasivo (escuchando las conexiones)?Compruebe si el socket está escuchando en C
Respuesta
Esto se puede comprobar con getsockopt (SO_ACCEPTCONN). Por ejemplo:
#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);
No se puede decir realmente. Debe hacer un seguimiento de ello usted mismo, y cuando quiera verificar si un zócalo es el zócalo de escucha, compare con el que ha guardado.
Se puede ejecutar en la línea de comandos (en un entorno Mac/Linux):
lsof -i
y/o (Linux/Mac/Windows ambiente)
netstat -a
Pidió una solución C (no yo estaba abajo). – peterh
Estrictamente hablando, usted podría intente realizar una operación en el zócalo que de forma incidental determinaría qué tipo de zócalo es, como tratar de aceptar una conexión desde él. Si accept()
falla con EINVAL, es una buena señal de que no está escuchando. :)
Sin embargo, es necesario hacer un seguimiento de qué enchufes son una mejor solución. A menos que esté construyendo una aplicación realmente trivial, es probable que necesite guardar algún tipo de datos adicionales en cada socket de todos modos.
- 1. Compruebe si el socket está conectado o no
- 2. Comprueba si el puerto en serie está escuchando
- 3. Compruebe si el archivo ya está abierto
- 4. compruebe si NSNumber está vacío
- 5. Compruebe si "exec" está deshabilitado
- 6. Compruebe si un directorio está vacío usando C en Linux
- 7. Java - Escuchando un socket con ObjectInputStream
- 8. ¿Cómo verificar si un socket está conectado/desconectado en C#?
- 9. Compruebe si el tiempo frontal está habilitado en el dispositivo
- 10. Compruebe si el usuario está actualmente en línea (en vivo)
- 11. Compruebe si la cadena está vacía
- 12. compruebe si la conexión a Internet está disponible con C#
- 13. C compruebe si el archivo existe
- 14. Compruebe si un usuario está desconectado en el dispositivo
- 15. Compruebe si la dirección IP está en el rango privado
- 16. Compruebe si jQuery está incluido en el encabezado (Joomla)
- 17. Compruebe si el objeto está en una lista de objetos
- 18. Django compruebe si el campo está en blanco?
- 19. Delphi: compruebe si el archivo está en uso
- 20. Compruebe si el espacio está en una cadena
- 21. Compruebe si el iPad está en modo silencioso
- 22. compruebe si el indicador de acarreo está establecido
- 23. C++ compruebe si el elemento existe en el conjunto
- 24. ¿Cómo comprobar si el socket está cerrado en Boost.Asio?
- 25. ¿Cómo saber si el socket está abierto en PHP?
- 26. ¿Cómo está realmente QTcpServer escuchando conexiones?
- 27. WP7 compruebe si Internet está disponible
- 28. Compruebe si $ _POST-value está vacío
- 29. AS3: compruebe si un diccionario está vacío
- 30. OSX: compruebe si la pantalla está bloqueada
Sí, estaba pensando en anexarlo a un conjunto de descriptores de archivos y usarlo para verificarlo. ¡Gracias por la respuesta! –
'getsockopt (SOL_SOCKET, SO_ACCEPTCONN)' es la forma correcta de verificar un socket para escuchar. Deberías aceptar la respuesta de mark4o en su lugar. –
@RemyLebeau No lo sabía. Si bien podría ser más código, pero se ajusta mejor a la pregunta del OP. –