parent
d86d86633e
commit
9b4f2b84f1
@ -63,6 +63,10 @@ int uv__tcp_bind(uv_tcp_t* tcp,
|
||||
int err;
|
||||
int on;
|
||||
|
||||
/* Cannot set IPv6-only mode on non-IPv6 socket. */
|
||||
if ((flags & UV_TCP_IPV6ONLY) && addr->sa_family != AF_INET6)
|
||||
return -EINVAL;
|
||||
|
||||
err = maybe_new_socket(tcp,
|
||||
addr->sa_family,
|
||||
UV_STREAM_READABLE | UV_STREAM_WRITABLE);
|
||||
|
||||
@ -243,6 +243,10 @@ static int uv_tcp_try_bind(uv_tcp_t* handle,
|
||||
int r;
|
||||
|
||||
if (handle->socket == INVALID_SOCKET) {
|
||||
/* Cannot set IPv6-only mode on non-IPv6 socket. */
|
||||
if ((flags & UV_TCP_IPV6ONLY) && addr->sa_family != AF_INET6)
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
SOCKET sock = socket(addr->sa_family, SOCK_STREAM, 0);
|
||||
if (sock == INVALID_SOCKET) {
|
||||
return WSAGetLastError();
|
||||
|
||||
@ -65,6 +65,7 @@ TEST_DECLARE (tcp_bind_error_addrnotavail_2)
|
||||
TEST_DECLARE (tcp_bind_error_fault)
|
||||
TEST_DECLARE (tcp_bind_error_inval)
|
||||
TEST_DECLARE (tcp_bind_localhost_ok)
|
||||
TEST_DECLARE (tcp_bind_invalid_flags)
|
||||
TEST_DECLARE (tcp_listen_without_bind)
|
||||
TEST_DECLARE (tcp_connect_error_fault)
|
||||
TEST_DECLARE (tcp_connect_timeout)
|
||||
@ -335,6 +336,7 @@ TASK_LIST_START
|
||||
TEST_ENTRY (tcp_bind_error_fault)
|
||||
TEST_ENTRY (tcp_bind_error_inval)
|
||||
TEST_ENTRY (tcp_bind_localhost_ok)
|
||||
TEST_ENTRY (tcp_bind_invalid_flags)
|
||||
TEST_ENTRY (tcp_listen_without_bind)
|
||||
TEST_ENTRY (tcp_connect_error_fault)
|
||||
TEST_ENTRY (tcp_connect_timeout)
|
||||
|
||||
@ -185,6 +185,23 @@ TEST_IMPL(tcp_bind_localhost_ok) {
|
||||
}
|
||||
|
||||
|
||||
TEST_IMPL(tcp_bind_invalid_flags) {
|
||||
struct sockaddr_in addr;
|
||||
uv_tcp_t server;
|
||||
int r;
|
||||
|
||||
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
|
||||
|
||||
r = uv_tcp_init(uv_default_loop(), &server);
|
||||
ASSERT(r == 0);
|
||||
r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, UV_TCP_IPV6ONLY);
|
||||
ASSERT(r == UV_EINVAL);
|
||||
|
||||
MAKE_VALGRIND_HAPPY();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
TEST_IMPL(tcp_listen_without_bind) {
|
||||
int r;
|
||||
uv_tcp_t server;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user