unix: add UV_HANDLE_IPV6 flag to tcp and udp handles
This commit is contained in:
parent
3558d65d2f
commit
7a4c42a054
@ -136,7 +136,8 @@ enum {
|
||||
UV_STREAM_READ_EOF = 0x200, /* read(2) read EOF. */
|
||||
UV_TCP_NODELAY = 0x400, /* Disable Nagle. */
|
||||
UV_TCP_KEEPALIVE = 0x800, /* Turn on keep-alive. */
|
||||
UV_TCP_SINGLE_ACCEPT = 0x1000 /* Only accept() when idle. */
|
||||
UV_TCP_SINGLE_ACCEPT = 0x1000, /* Only accept() when idle. */
|
||||
UV_HANDLE_IPV6 = 0x2000 /* Handle is bound to a IPv6 socket. */
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
|
||||
@ -89,8 +89,11 @@ int uv__tcp_bind(uv_tcp_t* tcp,
|
||||
errno = 0;
|
||||
if (bind(tcp->io_watcher.fd, addr, addrlen) && errno != EADDRINUSE)
|
||||
return -errno;
|
||||
|
||||
tcp->delayed_error = -errno;
|
||||
|
||||
if (addr->sa_family == AF_INET6)
|
||||
tcp->flags |= UV_HANDLE_IPV6;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -349,6 +349,9 @@ int uv__udp_bind(uv_udp_t* handle,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (addr->sa_family == AF_INET6)
|
||||
handle->flags |= UV_HANDLE_IPV6;
|
||||
|
||||
return 0;
|
||||
|
||||
out:
|
||||
@ -634,8 +637,13 @@ int uv_udp_set_multicast_interface(uv_udp_t* handle, const char* interface_addr)
|
||||
|
||||
if (!interface_addr) {
|
||||
memset(&addr_st, 0, sizeof addr_st);
|
||||
addr_st.ss_family = AF_INET;
|
||||
addr4->sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
if (handle->flags & UV_HANDLE_IPV6) {
|
||||
addr_st.ss_family = AF_INET6;
|
||||
addr6->sin6_scope_id = 0;
|
||||
} else {
|
||||
addr_st.ss_family = AF_INET;
|
||||
addr4->sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
}
|
||||
} else if (uv_ip4_addr(interface_addr, 0, addr4) == 0) {
|
||||
/* nothing, address was parsed */
|
||||
} else if (uv_ip6_addr(interface_addr, 0, addr6) == 0) {
|
||||
|
||||
@ -84,8 +84,10 @@ extern __declspec( thread ) int uv__crt_assert_enabled;
|
||||
#define UV_HANDLE_EMULATE_IOCP 0x00100000
|
||||
#define UV_HANDLE_BLOCKING_WRITES 0x00200000
|
||||
|
||||
/* Only used by uv_tcp_t handles. */
|
||||
/* Used by uv_tcp_t and uv_udp_t handles */
|
||||
#define UV_HANDLE_IPV6 0x01000000
|
||||
|
||||
/* Only used by uv_tcp_t handles. */
|
||||
#define UV_HANDLE_TCP_NODELAY 0x02000000
|
||||
#define UV_HANDLE_TCP_KEEPALIVE 0x04000000
|
||||
#define UV_HANDLE_TCP_SINGLE_ACCEPT 0x08000000
|
||||
|
||||
@ -72,7 +72,7 @@ TEST_IMPL(udp_multicast_interface6) {
|
||||
#if defined(__APPLE__)
|
||||
r = uv_udp_set_multicast_interface(&server, "::1%lo0");
|
||||
#else
|
||||
r = uv_udp_set_multicast_interface(&server, "::1");
|
||||
r = uv_udp_set_multicast_interface(&server, NULL);
|
||||
#endif
|
||||
ASSERT(r == 0);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user