]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/gsocket.c
Added a check for -lresolv in configure.in
[wxWidgets.git] / src / unix / gsocket.c
index 9a575b233c4d43d34fb2e79cfc4314a5e006e420..2ffafc86b6993ac60e806f8c349d0853966e723d 100644 (file)
@@ -90,7 +90,7 @@ GSocket *GSocket_new()
 
   socket->m_fd                  = -1;
   for (i=0;i<GSOCK_MAX_EVENT;i++) {
-    socket->m_fbacks[i]         = NULL;
+    socket->m_cbacks[i]         = NULL;
     socket->m_iocalls[i]        = FALSE;
   }
   socket->m_local               = NULL;
@@ -99,7 +99,7 @@ GSocket *GSocket_new()
   socket->m_server             = FALSE;
   socket->m_stream             = TRUE;
   socket->m_gui_dependent      = NULL;
-  socket->m_blocking           = FALSE;
+  socket->m_non_blocking       = FALSE;
   socket->m_timeout             = 10*60*1000;
                                       /* 10 minutes * 60 sec * 1000 millisec */
 
@@ -291,7 +291,7 @@ GSocketError GSocket_SetServer(GSocket *sck)
     return GSOCK_IOERR;
   }
 
-  GSocket_SetNonBlocking(sck, sck->m_blocking);
+  GSocket_SetNonBlocking(sck, sck->m_non_blocking);
   GSocket_SetTimeout(sck, sck->m_timeout);
 
   return GSOCK_NOERROR;
@@ -365,7 +365,7 @@ GSocketError GSocket_SetNonOriented(GSocket *sck)
     return GSOCK_IOERR;
   }
 
-  GSocket_SetNonBlocking(sck, sck->m_blocking);
+  GSocket_SetNonBlocking(sck, sck->m_non_blocking);
   GSocket_SetTimeout(sck, sck->m_timeout);
 
   return GSOCK_NOERROR;
@@ -423,7 +423,7 @@ GSocketError GSocket_Connect(GSocket *sck, GSocketStream stream)
   /* It is not a server */
   sck->m_server = FALSE;
 
-  GSocket_SetNonBlocking(sck, sck->m_blocking);
+  GSocket_SetNonBlocking(sck, sck->m_non_blocking);
   GSocket_SetTimeout(sck, sck->m_timeout);
 
   return GSOCK_NOERROR;
@@ -501,7 +501,7 @@ void GSocket_SetNonBlocking(GSocket *socket, bool non_block)
 {
   assert(socket != NULL);
 
-  socket->m_blocking = non_block;
+  socket->m_non_blocking = non_block;
 
   if (socket->m_fd != -1)
     ioctl(socket->m_fd, FIONBIO, &non_block);
@@ -551,7 +551,7 @@ GSocketError GSocket_GetError(GSocket *socket)
 /* Callbacks */
 
 /* 
-   Only one fallback is possible for each event (INPUT, OUTPUT, CONNECTION)
+   Only one callback is possible for each event (INPUT, OUTPUT, CONNECTION)
    INPUT: The function is called when there is at least a byte in the 
           input buffer
    OUTPUT: The function is called when the system is sure the next write call
@@ -570,7 +570,7 @@ GSocketError GSocket_GetError(GSocket *socket)
                 CONNECTION -> GSocket_Accept()
 */
 void GSocket_SetCallback(GSocket *socket, GSocketEventFlags event,
-                        GSocketCallback fallback, char *cdata)
+                        GSocketCallback callback, char *cdata)
 {
   int count;
 
@@ -580,7 +580,7 @@ void GSocket_SetCallback(GSocket *socket, GSocketEventFlags event,
     /* We test each flag and, if it is enabled, we enable the corresponding
        event */
     if ((event & (1 << count)) != 0) {
-      socket->m_fbacks[count] = fallback;
+      socket->m_cbacks[count] = callback;
       socket->m_data[count] = cdata;
       _GSocket_Enable(socket, count);
     }
@@ -588,7 +588,7 @@ void GSocket_SetCallback(GSocket *socket, GSocketEventFlags event,
 }
 
 /*
-  UnsetCallback will disables all fallbacks specified by "event".
+  UnsetCallback will disables all callbacks specified by "event".
   NOTE: event may be a combination of flags
 */
 void GSocket_UnsetCallback(GSocket *socket, GSocketEventFlags event)
@@ -600,16 +600,16 @@ void GSocket_UnsetCallback(GSocket *socket, GSocketEventFlags event)
   for (count=0;count<GSOCK_MAX_EVENT;count++) {
     if ((event & (1 << count)) != 0) {
       _GSocket_Disable(socket, count);
-      socket->m_fbacks[count] = NULL;
+      socket->m_cbacks[count] = NULL;
     }
   }
 }
 
 #define CALL_FALLBACK(socket, event) \
 if (socket->m_iocalls[event] && \
-    socket->m_fbacks[event]) {\
+    socket->m_cbacks[event]) {\
   _GSocket_Disable(socket, event); \
-  socket->m_fbacks[event](socket, event, \
+  socket->m_cbacks[event](socket, event, \
                    socket->m_data[event]); \
 }
 
@@ -623,48 +623,36 @@ if (socket->m_iocalls[event] && \
   signal(SIGPIPE, old_handler); \
 }
 
-#if 0
-#ifndef CAN_USE_TIMEOUT
-
 #define ENABLE_TIMEOUT(socket) \
 { \
   struct itimerval old_ival, new_ival; \
   void (*old_timer_sig)(int); \
 \
-  new_ival.it_interval.tv_sec = socket->m_timeout / 1000; \
-  new_ival.it_interval.tv_usec = (socket->m_timeout % 1000) * 1000; \
-  setitimer(ITIMER_REAL, &new_ival, &old_ival); \
-  old_timer_sig = signal(SIGALRM, SIG_DFL);
+  old_timer_sig = signal(SIGALRM, SIG_DFL); \
+  siginterrupt(SIGALRM, 1); \
+  new_ival.it_value.tv_sec = socket->m_timeout / 1000; \
+  new_ival.it_value.tv_usec = (socket->m_timeout % 1000) * 1000; \
+  new_ival.it_interval.tv_sec = 0; \
+  new_ival.it_interval.tv_usec = 0; \
+  setitimer(ITIMER_REAL, &new_ival, &old_ival);
 
 #define DISABLE_TIMEOUT(socket) \
   signal(SIGALRM, old_timer_sig); \
+  siginterrupt(SIGALRM, 0); \
   setitimer(ITIMER_REAL, &old_ival, NULL); \
 }
 
-#else
-
-#define ENABLE_TIMEOUT(s)
-#define DISABLE_TIMEOUT(s)
-
-#endif
-
-#endif
-
-/* Temporary */
-#define ENABLE_TIMEOUT(s)
-#define DISABLE_TIMEOUT(s)
-
 void _GSocket_Enable(GSocket *socket, GSocketEvent event)
 {
   socket->m_iocalls[event] = TRUE;
-  if (socket->m_fbacks[event])
+  if (socket->m_cbacks[event])
     _GSocket_Install_Callback(socket, event);
 }
 
 void _GSocket_Disable(GSocket *socket, GSocketEvent event)
 {
   socket->m_iocalls[event] = FALSE;
-  if (socket->m_fbacks[event])
+  if (socket->m_cbacks[event])
     _GSocket_Uninstall_Callback(socket, event);
 }
 
@@ -683,7 +671,7 @@ int _GSocket_Recv_Stream(GSocket *socket, char *buffer, int size)
     return -1;
   }
   if (errno == EWOULDBLOCK) {
-    socket->m_error = GSOCK_TRYAGAIN;
+    socket->m_error = GSOCK_WOULDBLOCK;
     return -1;
   }
   return ret;
@@ -707,7 +695,7 @@ int _GSocket_Recv_Dgram(GSocket *socket, char *buffer, int size)
     return -1;
   }
   if (errno == EWOULDBLOCK) {
-    socket->m_error = GSOCK_TRYAGAIN;
+    socket->m_error = GSOCK_WOULDBLOCK;
     return -1;
   }
 
@@ -739,7 +727,7 @@ int _GSocket_Send_Stream(GSocket *socket, const char *buffer, int size)
     return -1;
   }
   if (errno == EWOULDBLOCK) {
-    socket->m_error = GSOCK_TRYAGAIN;
+    socket->m_error = GSOCK_WOULDBLOCK;
     return -1;
   }
   return ret;
@@ -773,7 +761,7 @@ int _GSocket_Send_Dgram(GSocket *socket, const char *buffer, int size)
     return -1;
   }
   if (errno == EWOULDBLOCK) {
-    socket->m_error = GSOCK_TRYAGAIN;
+    socket->m_error = GSOCK_WOULDBLOCK;
     return -1;
   }
 
@@ -984,7 +972,15 @@ GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname)
   addr = &(((struct sockaddr_in *)address->m_addr)->sin_addr);
 
   /* If it is a numeric host name, convert it now */
+#if defined(HAVE_INET_ATON)
   if (inet_aton(hostname, addr) == 0) {
+#elif defined(HAVE_INET_ADDR)
+  /* Fix from Guillermo Rodriguez Garcia <guille@iies.es> */
+  if ( (addr->s_addr = inet_addr(hostname)) == -1 ) {
+#else
+  /* Use gethostbyname by default */
+  if (1) {
+#endif
     struct in_addr *array_addr;
 
     /* It is a real name, we solve it */