Skip to content

Commit a687427

Browse files
committed
use ipv4 loopback instead of ipv6, because ipv6 lookback may be disabled in windows
1 parent 85d4bc4 commit a687427

1 file changed

Lines changed: 7 additions & 19 deletions

File tree

src/sockevent.h

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,6 @@
1919
typedef SOCKET socket_t;
2020
static const socket_t socket_invalid = INVALID_SOCKET;
2121

22-
static inline int
23-
none_blocking_(socket_t fd) {
24-
unsigned long on = 1;
25-
return ioctlsocket(fd, FIONBIO, &on);
26-
}
27-
2822
static inline void
2923
sockevent_initsocket() {
3024
WSADATA wsaData;
@@ -43,11 +37,6 @@ static const socket_t socket_invalid = -1;
4337

4438
#define closesocket close
4539

46-
static inline int
47-
none_blocking_(socket_t fd) {
48-
return fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK);
49-
}
50-
5140
static inline void sockevent_initsocket() {}
5241

5342
#endif
@@ -96,28 +85,27 @@ sockevent_open(struct sockevent *e) {
9685
if (e->pipe[0] != socket_invalid)
9786
return 0;
9887
#if defined(_WIN32)
99-
socket_t fd = socket(AF_INET6, SOCK_STREAM, 0);
88+
// ipv6 loopback may be disabled, so use ipv4
89+
socket_t fd = socket(AF_INET, SOCK_STREAM, 0);
10090
if (fd == socket_invalid)
10191
goto _error;
10292
e->pipe[0] = socket_invalid;
10393
e->pipe[1] = socket_invalid;
104-
struct sockaddr_in6 loopback;
94+
struct sockaddr_in loopback;
10595
memset(&loopback, 0, sizeof(loopback));
106-
loopback.sin6_family = AF_INET6;
107-
loopback.sin6_addr = in6addr_loopback;
108-
loopback.sin6_port = 0;
96+
loopback.sin_family = AF_INET;
97+
loopback.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
98+
loopback.sin_port = htons(0);
10999
if (bind(fd, (const struct sockaddr *)&loopback, sizeof(loopback)) < 0)
110100
goto _error;
111101
socklen_t addrlen = sizeof(loopback);
112102
if (getsockname(fd, (struct sockaddr *)&loopback, &addrlen) < 0)
113103
goto _error;
114104
if (listen(fd, 32) < 0)
115105
goto _error;
116-
e->pipe[1] = socket(AF_INET6, SOCK_STREAM, 0);
106+
e->pipe[1] = socket(AF_INET, SOCK_STREAM, 0);
117107
if (e->pipe[1] < 0)
118108
goto _error;
119-
if (none_blocking_(e->pipe[1]) < 0)
120-
goto _error;
121109

122110
connect(e->pipe[1], (const struct sockaddr *)&loopback, sizeof(loopback));
123111

0 commit comments

Comments
 (0)