-  struct hostent *he = NULL;
-  *err = 0;
-#if defined(HAVE_FUNC_GETHOSTBYNAME_R_6)
-  if (gethostbyname_r(hostname, h, (char*)buffer, size, &he, err))
-    he = NULL;
-#elif defined(HAVE_FUNC_GETHOSTBYNAME_R_5)
-  he = gethostbyname_r(hostname, h, (char*)buffer, size, err);
-#elif defined(HAVE_FUNC_GETHOSTBYNAME_R_3)
-  if (gethostbyname_r(hostname, h, (struct hostent_data*) buffer))
-  {
-    he = NULL;
-    *err = h_errno;
-  }
-  else
-    he = h;
-#elif defined(HAVE_GETHOSTBYNAME)
-#if wxUSE_THREADS
-  wxMutexLocker locker(nameLock);
-#endif
-  he = gethostbyname(hostname);
-  if (!he)
-    *err = h_errno;
-  else
-    he = deepCopyHostent(h, he, (char*)buffer, size, err);
-#endif
-  return he;
-}
-
-#if defined(HAVE_GETHOSTBYNAME) && wxUSE_THREADS
-static wxMutex addrLock;
-#endif
-struct hostent * wxGethostbyaddr_r(const char *addr_buf, int buf_size,
-                                  int proto, struct hostent *h,
-                                  void *buffer, int size, int *err)
-{
-  struct hostent *he = NULL;
-  *err = 0;
-#if defined(HAVE_FUNC_GETHOSTBYNAME_R_6)
-  if (gethostbyaddr_r(addr_buf, buf_size, proto, h,
-                     (char*)buffer, size, &he, err))
-    he = NULL;
-#elif defined(HAVE_FUNC_GETHOSTBYNAME_R_5)
-  he = gethostbyaddr_r(addr_buf, buf_size, proto, h, (char*)buffer, size, err);
-#elif defined(HAVE_FUNC_GETHOSTBYNAME_R_3)
-  if (gethostbyaddr_r(addr_buf, buf_size, proto, h,
-                       (struct hostent_data*) buffer))
-  {
-    he = NULL;
-    *err = h_errno;
-  }
-  else
-    he = h;
-#elif defined(HAVE_GETHOSTBYNAME)
-#if wxUSE_THREADS
-  wxMutexLocker locker(addrLock);
-#endif
-  he = gethostbyaddr(addr_buf, buf_size, proto);
-  if (!he)
-    *err = h_errno;
-  else
-    he = deepCopyHostent(h, he, (char*)buffer, size, err);
-#endif
-  return he;
-}
-
-#if defined(HAVE_GETSERVBYNAME)
-static struct servent * deepCopyServent(struct servent *s,
-                                       const struct servent *se,
-                                       char *buffer, int size)
-{
-  /* copy plain old structure */
-  memcpy(s, se, sizeof(struct servent));
-
-  /* copy name */
-  int len = strlen(s->s_name);
-  if (len >= size)
-  {
-    return NULL;
-  }
-  memcpy(buffer, s->s_name, len);
-  buffer[len] = '\0';
-  s->s_name = buffer;
-
-  /* track position in the buffer */
-  int pos = len + 1;
-
-  /* copy protocol */
-  len = strlen(s->s_proto);
-  if (pos + len >= size)
-  {
-    return NULL;
-  }
-  memcpy(buffer + pos, s->s_proto, len);
-  buffer[pos + len] = '\0';
-  s->s_proto = buffer + pos;
-
-  /* track position in the buffer */
-  pos += len + 1;
-
-  /* ensure pointer alignment */
-  unsigned int misalign = sizeof(char *) - pos%sizeof(char *);
-  if(misalign < sizeof(char *))
-    pos += misalign;
-
-  /* leave space for pointer list */
-  char **p = s->s_aliases, **q;
-  char **s_aliases = (char **)(buffer + pos);
-  while(*(p++) != 0)
-    pos += sizeof(char *);
-
-  /* copy addresses and fill new pointer list */
-  for (p = s->s_aliases, q = s_aliases; *p != 0; p++, q++){
-    len = strlen(*p);
-    if (size <= pos + len)
-    {
-      return NULL;
-    }
-    memcpy(buffer + pos, *p, len); /* copy content */
-    buffer[pos + len] = '\0';
-    *q = buffer + pos; /* set copied pointer to copied content */
-    pos += len + 1;
-  }
-  *++q = 0; /* null terminate the pointer list */
-  s->s_aliases = s_aliases; /* copy pointer to pointers */
-  return s;
-}
-#endif
-
-#if defined(HAVE_GETSERVBYNAME) && wxUSE_THREADS
-static wxMutex servLock;
-#endif
-struct servent *wxGetservbyname_r(const char *port, const char *protocol,
-                                 struct servent *serv, void *buffer, int size)
-{
-  struct servent *se = NULL;
-#if defined(HAVE_FUNC_GETSERVBYNAME_R_6)
-  if (getservbyname_r(port, protocol, serv, (char*)buffer, size, &se))
-    se = NULL;
-#elif defined(HAVE_FUNC_GETSERVBYNAME_R_5)
-  se = getservbyname_r(port, protocol, serv, (char*)buffer, size);
-#elif defined(HAVE_FUNC_GETSERVBYNAME_R_4)
-  if (getservbyname_r(port, protocol, serv, (struct servent_data*) buffer))
-    se = NULL;
-  else
-    se = serv;
-#elif defined(HAVE_GETSERVBYNAME)
-#if wxUSE_THREADS
-  wxMutexLocker locker(servLock);
-#endif
-  se = getservbyname(port, protocol);
-  if (se)
-    se = deepCopyServent(serv, se, (char*)buffer, size);
-#endif
-  return se;
-}
-
-/* debugging helpers */
-#ifdef __GSOCKET_DEBUG__
-#  define SOCKET_DEBUG(args) printf args
-#else
-#  define SOCKET_DEBUG(args)
-#endif /* __GSOCKET_DEBUG__ */
-
-/* static */
-wxSocketImpl *wxSocketImpl::Create(wxSocketBase& wxsocket)
-{
-    return new wxSocketImplUnix(wxsocket);
-}
-
-
-/*
- *  Disallow further read/write operations on this socket, close
- *  the fd and disable all callbacks.
- */
-void wxSocketImplUnix::Shutdown()
-{
-    /* Don't allow events to fire after socket has been closed */
-    DisableEvents();
-
-    wxSocketImpl::Shutdown();
-}
-
-/*
- *  Waits for an incoming client connection. Returns a pointer to
- *  a wxSocketImplUnix object, or NULL if there was an error, in which case
- *  the last error field will be updated for the calling wxSocketImplUnix.
- *
- *  Error codes (set in the calling wxSocketImplUnix)
- *    wxSOCKET_INVSOCK    - the socket is not valid or not a server.
- *    wxSOCKET_TIMEDOUT   - timeout, no incoming connections.
- *    wxSOCKET_WOULDBLOCK - the call would block and the socket is nonblocking.
- *    wxSOCKET_MEMERR     - couldn't allocate memory.
- *    wxSOCKET_IOERR      - low-level error.
- */
-wxSocketImpl *wxSocketImplUnix::WaitConnection(wxSocketBase& wxsocket)
-{
-  wxSockAddr from;
-  WX_SOCKLEN_T fromlen = sizeof(from);
-  wxSocketImpl *connection;
-  wxSocketError err;
-  int arg = 1;
-
-  /* If the socket has already been created, we exit immediately */
-  if (m_fd == INVALID_SOCKET || !m_server)
-  {
-    m_error = wxSOCKET_INVSOCK;
-    return NULL;
-  }
-
-  /* Create a wxSocketImplUnix object for the new connection */
-  connection = wxSocketImplUnix::Create(wxsocket);
-
-  if (!connection)
-  {
-    m_error = wxSOCKET_MEMERR;
-    return NULL;
-  }
-
-  /* Wait for a connection (with timeout) */
-  if (Input_Timeout() == wxSOCKET_TIMEDOUT)
-  {
-    delete connection;
-    /* m_error set by Input_Timeout */
-    return NULL;
-  }
-
-  connection->m_fd = accept(m_fd, (sockaddr*)&from, (WX_SOCKLEN_T *) &fromlen);
-
-  /* Reenable CONNECTION events */
-  EnableEvent(wxSOCKET_CONNECTION);
-
-  if (connection->m_fd == INVALID_SOCKET)
-  {
-    if (errno == EWOULDBLOCK)
-      m_error = wxSOCKET_WOULDBLOCK;
-    else
-      m_error = wxSOCKET_IOERR;
-
-    delete connection;
-    return NULL;
-  }
-
-  /* Initialize all fields */
-  connection->m_server   = false;
-  connection->m_stream   = true;
-
-  /* Setup the peer address field */
-  connection->m_peer = GAddress_new();
-  if (!connection->m_peer)
-  {
-    delete connection;
-    m_error = wxSOCKET_MEMERR;
-    return NULL;
-  }
-
-  err = _GAddress_translate_from(connection->m_peer, (sockaddr*)&from, fromlen);
-  if (err != wxSOCKET_NOERROR)
-  {
-    delete connection;
-    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
-  if (m_use_events)
-    connection->Notify(true);
-
-  return connection;
-}
-
-void wxSocketImplUnix::Notify(bool flag)
-{
-    if (flag == m_use_events)