Estoy trabajando en un puerto de Windows de un programa POSIX C++.¿Es seguro convertir SOCKET a int bajo Win64?
El problema es que las funciones POSIX estándar como aceptar() o bind() esperar un ‘int’ como primer parámetro, mientras que sus contrapartes de WinSock utilizan ‘SOCKET’.
Cuando compilado para 32 bits que todo está bien, porque ambos son de 32 bits, pero bajo Win64 socket es de 64 bits y 32 bits int permanece y se genera una gran cantidad de Advertencia del compilador de esta manera:
warning C4244: '=' : conversion from 'SOCKET' to 'int', possible loss of data
Probé para evitar el problema mediante el uso de un typedef:
#ifdef _WIN32
typedef SOCKET sock_t;
#else
typedef int sock_t;
#endif
y sustitución de 'int con sock_t en los lugares apropiados.
Esto estaba bien hasta que llegué a una parte del código que llama a las API de OpenSSL.
Como se vio, OpenSSL utiliza entradas para conectores incluso en Win64. Eso pareció muy extraño, por lo que comenzó a buscar una respuesta, pero lo único que encontré fue un antiguo puesto en la lista de correo openssl-dev, que refirió a un comentario e_os.h:
/*
* Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because
* the value constitutes an index in per-process table of limited size
* and not a real pointer.
*/
Así que mi pregunta es :
¿es realmente seguro convertir SOCKET a int?
me gustaría ver algún tipo de documentación que demuestra que los valores de socket no puede ser mayor que 2^32.
¡Gracias de antemano!
Ryck
+1: Tengo el mismo problema ** ** YA ... – paercebal