HP-UX socket fixes from Mikulas Patocka.

1. getaddrinfo returns IPv6 address even if IPv6 is not configured.
The socket syscalls fails to create IPv6 socket. This is fixed by retrying for all possible addresses returned by getaddrinfo.

2. On HP-UX EAGAIN is used, not EWOULDBLOCK.
This commit is contained in:
Mark Pizzolato 2013-03-18 06:07:27 -07:00
parent 7756cb8cd4
commit 1e515d8357
2 changed files with 12 additions and 0 deletions

View file

@ -715,9 +715,17 @@ for (; preferred != NULL; preferred = preferred->ai_next) {
} }
if (preferred == NULL) if (preferred == NULL)
preferred = result; preferred = result;
#else
retry:
#endif #endif
newsock = sim_create_sock (preferred->ai_family); /* create socket */ newsock = sim_create_sock (preferred->ai_family); /* create socket */
if (newsock == INVALID_SOCKET) { /* socket error? */ if (newsock == INVALID_SOCKET) { /* socket error? */
#ifndef IPV6_V6ONLY
if (preferred->ai_next) {
preferred = preferred->ai_next;
goto retry;
}
#endif
p_freeaddrinfo(result); p_freeaddrinfo(result);
return newsock; return newsock;
} }

View file

@ -53,7 +53,11 @@
#define WSAGetLastError() errno /* Windows macros */ #define WSAGetLastError() errno /* Windows macros */
#define closesocket close #define closesocket close
#define SOCKET int32 #define SOCKET int32
#if defined(__hpux)
#define WSAEWOULDBLOCK EAGAIN
#else
#define WSAEWOULDBLOCK EWOULDBLOCK #define WSAEWOULDBLOCK EWOULDBLOCK
#endif
#define WSAEINPROGRESS EINPROGRESS #define WSAEINPROGRESS EINPROGRESS
#define WSAETIMEDOUT ETIMEDOUT #define WSAETIMEDOUT ETIMEDOUT
#define WSAECONNREFUSED ECONNREFUSED #define WSAECONNREFUSED ECONNREFUSED