diff options
Diffstat (limited to 'src/microhttpd/mhd_itc.c')
-rw-r--r-- | src/microhttpd/mhd_itc.c | 81 |
1 files changed, 0 insertions, 81 deletions
diff --git a/src/microhttpd/mhd_itc.c b/src/microhttpd/mhd_itc.c index 71e54a0d..553bfcf5 100644 --- a/src/microhttpd/mhd_itc.c +++ b/src/microhttpd/mhd_itc.c @@ -31,87 +31,6 @@ #endif /* HAVE_UNISTD_H */ #include <fcntl.h> -#if defined(_WIN32) && !defined(__CYGWIN__) -/** - * Create pair of mutually connected TCP/IP sockets on loopback address - * @param sockets_pair array to receive resulted sockets - * @return zero on success, -1 otherwise - */ -int MHD_W32_pair_of_sockets_(SOCKET sockets_pair[2]) -{ - int i; - if (!sockets_pair) - { - errno = EINVAL; - return -1; - } - -#define PAIRMAXTRYIES 800 - for (i = 0; i < PAIRMAXTRYIES; i++) - { - struct sockaddr_in listen_addr; - SOCKET listen_s; - static const int c_addinlen = sizeof(struct sockaddr_in); /* help compiler to optimize */ - int addr_len = c_addinlen; - int opt = 1; - - listen_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (INVALID_SOCKET == listen_s) - break; /* can't create even single socket */ - - listen_addr.sin_family = AF_INET; - listen_addr.sin_port = htons(0); - listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - if (0 == bind(listen_s, (struct sockaddr*) &listen_addr, c_addinlen) - && 0 == listen(listen_s, 1) - && 0 == getsockname(listen_s, (struct sockaddr*) &listen_addr, - &addr_len)) - { - SOCKET client_s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (INVALID_SOCKET != client_s) - { - if (0 == ioctlsocket(client_s, FIONBIO, (u_long*) &opt) - && (0 == connect(client_s, (struct sockaddr*) &listen_addr, c_addinlen) - || WSAGetLastError() == WSAEWOULDBLOCK)) - { - struct sockaddr_in accepted_from_addr; - SOCKET server_s; - addr_len = c_addinlen; - server_s = accept(listen_s, - (struct sockaddr*) &accepted_from_addr, &addr_len); - if (INVALID_SOCKET != server_s) - { - struct sockaddr_in client_addr; - addr_len = c_addinlen; - opt = 0; - if (0 == getsockname(client_s, (struct sockaddr*) &client_addr, &addr_len) - && accepted_from_addr.sin_family == client_addr.sin_family - && accepted_from_addr.sin_port == client_addr.sin_port - && accepted_from_addr.sin_addr.s_addr == client_addr.sin_addr.s_addr - && 0 == ioctlsocket(client_s, FIONBIO, (u_long*) &opt) - && 0 == ioctlsocket(server_s, FIONBIO, (u_long*) &opt)) - { - closesocket(listen_s); - sockets_pair[0] = client_s; - sockets_pair[1] = server_s; - return 0; - } - closesocket(server_s); - } - } - closesocket(client_s); - } - } - closesocket(listen_s); - } - - sockets_pair[0] = INVALID_SOCKET; - sockets_pair[1] = INVALID_SOCKET; - return -1; -} - -#endif /* _WIN32 && ! __CYGWIN__ */ - #ifndef MHD_DONT_USE_PIPES #if !defined(_WIN32) || defined(__CYGWIN__) |