parent
d86d86633e
commit
9b4f2b84f1
@ -63,6 +63,10 @@ int uv__tcp_bind(uv_tcp_t* tcp,
|
|||||||
int err;
|
int err;
|
||||||
int on;
|
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,
|
err = maybe_new_socket(tcp,
|
||||||
addr->sa_family,
|
addr->sa_family,
|
||||||
UV_STREAM_READABLE | UV_STREAM_WRITABLE);
|
UV_STREAM_READABLE | UV_STREAM_WRITABLE);
|
||||||
|
|||||||
@ -243,6 +243,10 @@ static int uv_tcp_try_bind(uv_tcp_t* handle,
|
|||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (handle->socket == INVALID_SOCKET) {
|
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);
|
SOCKET sock = socket(addr->sa_family, SOCK_STREAM, 0);
|
||||||
if (sock == INVALID_SOCKET) {
|
if (sock == INVALID_SOCKET) {
|
||||||
return WSAGetLastError();
|
return WSAGetLastError();
|
||||||
|
|||||||
@ -65,6 +65,7 @@ TEST_DECLARE (tcp_bind_error_addrnotavail_2)
|
|||||||
TEST_DECLARE (tcp_bind_error_fault)
|
TEST_DECLARE (tcp_bind_error_fault)
|
||||||
TEST_DECLARE (tcp_bind_error_inval)
|
TEST_DECLARE (tcp_bind_error_inval)
|
||||||
TEST_DECLARE (tcp_bind_localhost_ok)
|
TEST_DECLARE (tcp_bind_localhost_ok)
|
||||||
|
TEST_DECLARE (tcp_bind_invalid_flags)
|
||||||
TEST_DECLARE (tcp_listen_without_bind)
|
TEST_DECLARE (tcp_listen_without_bind)
|
||||||
TEST_DECLARE (tcp_connect_error_fault)
|
TEST_DECLARE (tcp_connect_error_fault)
|
||||||
TEST_DECLARE (tcp_connect_timeout)
|
TEST_DECLARE (tcp_connect_timeout)
|
||||||
@ -335,6 +336,7 @@ TASK_LIST_START
|
|||||||
TEST_ENTRY (tcp_bind_error_fault)
|
TEST_ENTRY (tcp_bind_error_fault)
|
||||||
TEST_ENTRY (tcp_bind_error_inval)
|
TEST_ENTRY (tcp_bind_error_inval)
|
||||||
TEST_ENTRY (tcp_bind_localhost_ok)
|
TEST_ENTRY (tcp_bind_localhost_ok)
|
||||||
|
TEST_ENTRY (tcp_bind_invalid_flags)
|
||||||
TEST_ENTRY (tcp_listen_without_bind)
|
TEST_ENTRY (tcp_listen_without_bind)
|
||||||
TEST_ENTRY (tcp_connect_error_fault)
|
TEST_ENTRY (tcp_connect_error_fault)
|
||||||
TEST_ENTRY (tcp_connect_timeout)
|
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) {
|
TEST_IMPL(tcp_listen_without_bind) {
|
||||||
int r;
|
int r;
|
||||||
uv_tcp_t server;
|
uv_tcp_t server;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user