martes, 23 de febrero de 2010

Sockets multiplataforma

Un aperitivo mientras preparo algo mas interesante ;)}

Si alguien intento hacer un programa multiplataforma que hiciera uso de sockets se daria cuenta de que la unica diferencia en el manejo de estos entre Windows y los SO's basados en Unix es que el primero tiene una funcion adicional que hay que llamar para poder crear sockets, y otra para cuando se termine con su uso, y que se utilizan tipos de datos distintos (SOCKET en Windows y simplemente int en Unix).

Arreglar ese problema es sencillo, con un par de macros se soluciona el problema, aun asi, si prefieres evitar el trabajo de escribir el codigo, aqui lo tienes o descargalo de aqui [socket_wrapper] :


// -----------------------------------------------------------------
// Socket wrapper (aun que no estoy seguro de si se puede llamar asi)
#ifndef SOCKET_WRAPPER_H
  #define SOCKET_WRAPPER_H
  #ifdef _WIN32
    #include <winsock.h>
    #include <windows.h>
    #define tsocket SOCKET
    #define socket_init() WSADATA wsaData;\
                          WSAStartup(MAKEWORD(1,1),&wsaData);
    #define socket_end() WSACleanup();
  #else
    #include <unistd.h>
    #include <arpa/inet.h>
    #include <sys/select.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #define tsocket int
    #define socket_init()
    #define socket_end()
  #endif
#endif
// Socket wrapper end
// En windows es necesario compilarlo con -lwsock32
//  (para linkarlo a winsock)
// -----------------------------------------------------------------

Se usa como en Unix, pero el tipo de dato de los socket es tsocket y antes y despues de usar los socket hay que llamar a socket_init() y socket_end() respectivamente (en Unix no hara nada,pero en Windows llamara a las funciones necesarias).


Hasta otra

pd: No me olvide de SSHFS y las VPN

No hay comentarios:

Publicar un comentario