X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/38bb138f09688c1575766aafdbf296dfeeee0d7d..44fd6f721ad375033b2a2b64ac5f703ac70cb8f0:/src/os2/gsocket.c diff --git a/src/os2/gsocket.c b/src/os2/gsocket.c index 268b7860c4..c230c3da4d 100644 --- a/src/os2/gsocket.c +++ b/src/os2/gsocket.c @@ -3,8 +3,8 @@ * Name: gsocket.c * Authors: Guilhem Lavaux, * Guillermo Rodriguez Garcia (maintainer) - * Purpose: GSocket main Unix-style file - * Licence: The wxWindows licence + * Purpose: GSocket main Unix and OS/2 file + * Licence: The wxWidgets licence * CVSID: $Id$ * ------------------------------------------------------------------------- */ @@ -17,44 +17,49 @@ #include "wx/setup.h" #endif -#ifndef __EMX__ -/* I don't see, why this include is needed, but it seems to be necessary - sometimes. For EMX, including C++ headers into plain C source breaks - compilation, so don't do it there. */ +#if defined(__VISAGECPP__) +/* Seems to be needed by Visual Age C++, though I don't see how it manages + to not break on including a C++ header into a plain C source file */ #include "wx/defs.h" +#define BSD_SELECT /* use Berkley Sockets select */ #endif #if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) -#define BSD_SELECT /* use Berkley Sockets select */ - #include #include - -#ifdef __EMX__ +#ifdef __VISAGECPP__ +#include #include +#include #include -#include +#endif #include -#include -#include -#include -#define HAVE_INET_ADDR +#include +#ifdef __VMS__ +#include +struct sockaddr_un +{ + u_char sun_len; /* sockaddr len including null */ + u_char sun_family; /* AF_UNIX */ + char sun_path[108]; /* path name (gag) */ +}; #else +#include +#include +#endif -#include - +#ifndef __VISAGECPP__ #include -#include #include -#include +#include +#include +#include +#include +#else #include - -#endif - -#if defined(__VISAGECPP__) && __IBMCPP__ < 400 - +# if __IBMCPP__ < 400 #include #include #include @@ -63,15 +68,15 @@ #define EBADF SOCEBADF -#else - +# ifdef min +# undef min +# endif +# else #include #include #include -#ifdef __EMX__ -#define soclose(a) close(a) -#else +#define close(a) soclose(a) #define select(a,b,c,d,e) bsdselect(a,b,c,d,e) int _System bsdselect(int, struct fd_set *, @@ -79,33 +84,35 @@ int _System bsdselect(int, struct fd_set *, struct timeval *); int _System soclose(int); -#endif -#endif - -#include -#if (defined(__VISAGECPP__) && __IBMCPP__ < 400) || defined(__EMX__) -# ifdef min -# undef min # endif -# include #endif +#include +#include #include #include -#include - +#ifdef sun +# include +#endif +#ifdef sgi +# include +#endif #include #ifndef SOCKLEN_T -#ifdef __GLIBC__ -# if __GLIBC__ == 2 -# define SOCKLEN_T socklen_t -# endif +#ifdef VMS +# define SOCKLEN_T unsigned int #else -# define SOCKLEN_T int +# ifdef __GLIBC__ +# if __GLIBC__ == 2 +# define SOCKLEN_T socklen_t +# endif +# else +# define SOCKLEN_T int +# endif #endif -#endif +#endif /* SOCKLEN_T */ /* * MSW defines this, Unices don't. @@ -114,6 +121,11 @@ int _System soclose(int); #define INVALID_SOCKET -1 #endif +/* UnixWare reportedly needs this for FIONBIO definition */ +#ifdef __UNIXWARE__ +#include +#endif + /* * INADDR_BROADCAST is identical to INADDR_NONE which is not defined * on all systems. INADDR_BROADCAST should be fine to indicate an error. @@ -249,7 +261,7 @@ GSocket *GSocket_new(void) void GSocket_close(GSocket *socket) { _GSocket_Disable_Events(socket); - soclose(socket->m_fd); + close(socket->m_fd); socket->m_fd = INVALID_SOCKET; } @@ -297,7 +309,6 @@ void GSocket_Shutdown(GSocket *socket) socket->m_cbacks[evt] = NULL; socket->m_detected = GSOCK_LOST_FLAG; - _GSocket_Disable_Events(socket); } /* Address handling */ @@ -462,8 +473,11 @@ GSocketError GSocket_SetServer(GSocket *sck) sck->m_error = GSOCK_IOERR; return GSOCK_IOERR; } - +#if defined(__EMX__) || defined(__VISAGECPP__) ioctl(sck->m_fd, FIONBIO, (char*)&arg, sizeof(arg)); +#else + ioctl(sck->m_fd, FIONBIO, &arg); +#endif _GSocket_Enable_Events(sck); /* Bind to the local address, @@ -567,8 +581,11 @@ GSocket *GSocket_WaitConnection(GSocket *socket) socket->m_error = err; return NULL; } - +#if defined(__EMX__) || defined(__VISAGECPP__) ioctl(connection->m_fd, FIONBIO, (char*)&arg, sizeof(arg)); +#else + ioctl(connection->m_fd, FIONBIO, &arg); +#endif _GSocket_Enable_Events(connection); return connection; @@ -636,8 +653,11 @@ GSocketError GSocket_Connect(GSocket *sck, GSocketStream stream) sck->m_error = GSOCK_IOERR; return GSOCK_IOERR; } - +#if defined(__EMX__) || defined(__VISAGECPP__) ioctl(sck->m_fd, FIONBIO, (char*)&arg, sizeof(arg)); +#else + ioctl(sck->m_fd, FIONBIO, &arg); +#endif _GSocket_Enable_Events(sck); /* Connect it to the peer address, with a timeout (see below) */ @@ -740,8 +760,11 @@ GSocketError GSocket_SetNonOriented(GSocket *sck) sck->m_error = GSOCK_IOERR; return GSOCK_IOERR; } - +#if defined(__EMX__) || defined(__VISAGECPP__) ioctl(sck->m_fd, FIONBIO, (char*)&arg, sizeof(arg)); +#else + ioctl(sck->m_fd, FIONBIO, &arg); +#endif _GSocket_Enable_Events(sck); /* Bind to the local address, @@ -1140,10 +1163,10 @@ GSocketError _GSocket_Input_Timeout(GSocket *socket) if (ret == -1) { GSocket_Debug(( "GSocket_Input_Timeout, select returned -1\n" )); - if (errno == EBADF) GSocket_Debug(( "Invalid file descriptor\n" )); - if (errno == EINTR) GSocket_Debug(( "A non blocked signal was caught\n" )); - if (errno == EINVAL) GSocket_Debug(( "The highest number descriptor is negative\n" )); - if (errno == ENOMEM) GSocket_Debug(( "Not enough memory\n" )); + if (errno == EBADF) { GSocket_Debug(( "Invalid file descriptor\n" )); } + if (errno == EINTR) { GSocket_Debug(( "A non blocked signal was caught\n" )); } + if (errno == EINVAL) { GSocket_Debug(( "The highest number descriptor is negative\n" )); } + if (errno == ENOMEM) { GSocket_Debug(( "Not enough memory\n" )); } socket->m_error = GSOCK_TIMEDOUT; return GSOCK_TIMEDOUT; } @@ -1181,17 +1204,19 @@ GSocketError _GSocket_Output_Timeout(GSocket *socket) if (ret == -1) { GSocket_Debug(( "GSocket_Output_Timeout, select returned -1\n" )); - if (errno == EBADF) GSocket_Debug(( "Invalid file descriptor\n" )); - if (errno == EINTR) GSocket_Debug(( "A non blocked signal was caught\n" )); - if (errno == EINVAL) GSocket_Debug(( "The highest number descriptor is negative\n" )); - if (errno == ENOMEM) GSocket_Debug(( "Not enough memory\n" )); + if (errno == EBADF) { GSocket_Debug(( "Invalid file descriptor\n" )); } + if (errno == EINTR) { GSocket_Debug(( "A non blocked signal was caught\n" )); } + if (errno == EINVAL) { GSocket_Debug(( "The highest number descriptor is negative\n" )); } + if (errno == ENOMEM) { GSocket_Debug(( "Not enough memory\n" )); } socket->m_error = GSOCK_TIMEDOUT; return GSOCK_TIMEDOUT; } - if ( ! FD_ISSET(socket->m_fd, &writefds) ) - GSocket_Debug(( "GSocket_Output_Timeout is buggy!\n" )); - else - GSocket_Debug(( "GSocket_Output_Timeout seems correct\n" )); + if ( ! FD_ISSET(socket->m_fd, &writefds) ) { + GSocket_Debug(( "GSocket_Output_Timeout is buggy!\n" )); + } + else { + GSocket_Debug(( "GSocket_Output_Timeout seems correct\n" )); + } } else { @@ -1246,13 +1271,14 @@ int _GSocket_Send_Stream(GSocket *socket, const char *buffer, int size) { int ret; -#ifdef __EMX__ +#ifndef __VISAGECPP__ MASK_SIGNAL(); ret = send(socket->m_fd, buffer, size, 0); UNMASK_SIGNAL(); #else ret = send(socket->m_fd, (char *)buffer, size, 0); #endif + return ret; } @@ -1275,7 +1301,7 @@ int _GSocket_Send_Dgram(GSocket *socket, const char *buffer, int size) return -1; } -#ifdef __EMX__ +#ifndef __VISAGECPP__ MASK_SIGNAL(); ret = sendto(socket->m_fd, buffer, size, 0, addr, len); UNMASK_SIGNAL(); @@ -1451,7 +1477,7 @@ void GAddress_destroy(GAddress *address) if (address->m_addr) free(address->m_addr); -/* free(address); */ + free(address); } void GAddress_SetFamily(GAddress *address, GAddressType type) @@ -1569,8 +1595,7 @@ GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname) if (inet_aton(hostname, addr) == 0) { #elif defined(HAVE_INET_ADDR) - addr->s_addr = inet_addr(hostname); - if ( addr->s_addr == -1 ) + if ( (addr->s_addr = inet_addr(hostname)) == -1 ) { #else /* Use gethostbyname by default */ @@ -1629,7 +1654,7 @@ GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port, return GSOCK_INVPORT; } - se = getservbyname(port, protocol); + se = getservbyname(port, (char*)protocol); if (!se) { /* the cast to int suppresses compiler warnings about subscript having the @@ -1720,7 +1745,7 @@ unsigned short GAddress_INET_GetPort(GAddress *address) * ------------------------------------------------------------------------- */ -#ifdef __EMX__ +#ifndef __VISAGECPP__ GSocketError _GAddress_Init_UNIX(GAddress *address) { address->m_len = sizeof(struct sockaddr_un); @@ -1769,8 +1794,6 @@ GSocketError GAddress_UNIX_GetPath(GAddress *address, char *path, size_t sbuf) return GSOCK_NOERROR; } -#endif - /* __EMX__ */ -#endif - /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */ +#endif /* !defined(__VISAGECPP__) */ +#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */