Necesito determinar si un identificador que mi código no creó, para el cual GetFileType()==FILE_TYPE_PIPE
, es un socket o no. No parece haber una API para esto.¿Cómo distinguir un asa de socket Win32 de otros mangos de tubería?
He intentado lo siguiente. La idea general es utilizar una función específica del socket y tratar la falla como sin socket.
getsockopt()
- Este fue mi primer intento. Desafortunadamente, parece colgarse cuando se lo llama por muchos hilos en el mismo manejador (sin zócalo).WSAEnumNetworkEvents()
- esto es lo que hace Gnulib, pero tendrá efectos secundarios indeseables si el asa es una toma.getpeername()
- esto es lo que hace cygwin, pero esto también fallará en algunos enchufes. Adivinar si un error implica socket-ness no parece confiable y futuro seguro.
No me importa si la solución solo funciona en algunas versiones de Windows, p. Vista, siempre puedo recurrir a algún otro método en el caso general.
No. Lo intentaré, gracias. –