aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/uv.h5
-rw-r--r--src/unix/tcp.c29
-rw-r--r--src/uv-common.c16
-rw-r--r--src/uv-common.h5
-rw-r--r--src/win/tcp.c53
-rw-r--r--test/benchmark-multi-accept.c2
-rw-r--r--test/benchmark-ping-pongs.c2
-rw-r--r--test/benchmark-pump.c2
-rw-r--r--test/blackhole-server.c2
-rw-r--r--test/dns-server.c2
-rw-r--r--test/echo-server.c4
-rw-r--r--test/test-connection-fail.c2
-rw-r--r--test/test-delayed-accept.c2
-rw-r--r--test/test-getsockname.c2
-rw-r--r--test/test-ipc-send-recv.c2
-rw-r--r--test/test-ipc.c8
-rw-r--r--test/test-multiple-listen.c2
-rw-r--r--test/test-tcp-bind-error.c16
-rw-r--r--test/test-tcp-bind6-error.c14
-rw-r--r--test/test-tcp-close.c2
-rw-r--r--test/test-tcp-unexpected-read.c2
-rw-r--r--test/test-tcp-write-to-half-open-connection.c2
22 files changed, 86 insertions, 90 deletions
diff --git a/include/uv.h b/include/uv.h
index f956cb09..1043c517 100644
--- a/include/uv.h
+++ b/include/uv.h
@@ -759,8 +759,9 @@ UV_EXTERN int uv_tcp_keepalive(uv_tcp_t* handle,
*/
UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable);
-UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in);
-UV_EXTERN int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6);
+UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr_in* addr);
+UV_EXTERN int uv_tcp_bind6(uv_tcp_t* handle, const struct sockaddr_in6* addr);
+
UV_EXTERN int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name,
int* namelen);
UV_EXTERN int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name,
diff --git a/src/unix/tcp.c b/src/unix/tcp.c
index 6257f7d8..63622b96 100644
--- a/src/unix/tcp.c
+++ b/src/unix/tcp.c
@@ -56,14 +56,15 @@ static int maybe_new_socket(uv_tcp_t* handle, int domain, int flags) {
}
-static int uv__bind(uv_tcp_t* tcp,
- int domain,
- struct sockaddr* addr,
- int addrsize) {
+int uv__tcp_bind(uv_tcp_t* tcp,
+ const struct sockaddr* addr,
+ unsigned int addrlen) {
int err;
int on;
- err = maybe_new_socket(tcp, domain, UV_STREAM_READABLE | UV_STREAM_WRITABLE);
+ err = maybe_new_socket(tcp,
+ addr->sa_family,
+ UV_STREAM_READABLE | UV_STREAM_WRITABLE);
if (err)
return err;
@@ -72,7 +73,7 @@ static int uv__bind(uv_tcp_t* tcp,
return -errno;
errno = 0;
- if (bind(tcp->io_watcher.fd, addr, addrsize) && errno != EADDRINUSE)
+ if (bind(tcp->io_watcher.fd, addr, addrlen) && errno != EADDRINUSE)
return -errno;
tcp->delayed_error = -errno;
@@ -133,22 +134,6 @@ static int uv__connect(uv_connect_t* req,
}
-int uv__tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) {
- return uv__bind(handle,
- AF_INET,
- (struct sockaddr*)&addr,
- sizeof(struct sockaddr_in));
-}
-
-
-int uv__tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) {
- return uv__bind(handle,
- AF_INET6,
- (struct sockaddr*)&addr,
- sizeof(struct sockaddr_in6));
-}
-
-
int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) {
return uv__stream_open((uv_stream_t*)handle,
sock,
diff --git a/src/uv-common.c b/src/uv-common.c
index be1830c5..6b71f986 100644
--- a/src/uv-common.c
+++ b/src/uv-common.c
@@ -184,19 +184,19 @@ int uv_ip6_name(struct sockaddr_in6* src, char* dst, size_t size) {
}
-int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) {
- if (handle->type != UV_TCP || addr.sin_family != AF_INET)
- return UV_EINVAL;
+int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr_in* addr) {
+ if (handle->type == UV_TCP && addr->sin_family == AF_INET)
+ return uv__tcp_bind(handle, (const struct sockaddr*) addr, sizeof(*addr));
else
- return uv__tcp_bind(handle, addr);
+ return UV_EINVAL;
}
-int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) {
- if (handle->type != UV_TCP || addr.sin6_family != AF_INET6)
- return UV_EINVAL;
+int uv_tcp_bind6(uv_tcp_t* handle, const struct sockaddr_in6* addr) {
+ if (handle->type == UV_TCP && addr->sin6_family == AF_INET6)
+ return uv__tcp_bind(handle, (const struct sockaddr*) addr, sizeof(*addr));
else
- return uv__tcp_bind6(handle, addr);
+ return UV_EINVAL;
}
diff --git a/src/uv-common.h b/src/uv-common.h
index dc150912..4c88f2a6 100644
--- a/src/uv-common.h
+++ b/src/uv-common.h
@@ -59,8 +59,9 @@ enum {
# define UV__HANDLE_CLOSING 0x01
#endif
-int uv__tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr);
-int uv__tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr);
+int uv__tcp_bind(uv_tcp_t* tcp,
+ const struct sockaddr* addr,
+ unsigned int addrlen);
int uv__udp_bind(uv_udp_t* handle, struct sockaddr_in addr, unsigned flags);
int uv__udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, unsigned flags);
diff --git a/src/win/tcp.c b/src/win/tcp.c
index 7bc1a024..2e99a537 100644
--- a/src/win/tcp.c
+++ b/src/win/tcp.c
@@ -235,15 +235,14 @@ void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) {
}
-static int uv__bind(uv_tcp_t* handle,
- int family,
- struct sockaddr* addr,
- int addrsize) {
+static int uv_tcp_try_bind(uv_tcp_t* handle,
+ const struct sockaddr* addr,
+ unsigned int addrlen) {
DWORD err;
int r;
if (handle->socket == INVALID_SOCKET) {
- SOCKET sock = socket(family, SOCK_STREAM, 0);
+ SOCKET sock = socket(addr->sa_family, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET) {
return WSAGetLastError();
}
@@ -255,14 +254,14 @@ static int uv__bind(uv_tcp_t* handle,
return err;
}
- err = uv_tcp_set_socket(handle->loop, handle, sock, family, 0);
+ err = uv_tcp_set_socket(handle->loop, handle, sock, addr->sa_family, 0);
if (err) {
closesocket(sock);
return err;
}
}
- r = bind(handle->socket, addr, addrsize);
+ r = bind(handle->socket, addr, addrlen);
if (r == SOCKET_ERROR) {
err = WSAGetLastError();
@@ -281,18 +280,6 @@ static int uv__bind(uv_tcp_t* handle,
}
-int uv__tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) {
- return uv_translate_sys_error(
- uv__bind(handle, AF_INET, (struct sockaddr*) &addr, sizeof(addr)));
-}
-
-
-int uv__tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) {
- return uv_translate_sys_error(
- uv__bind(handle, AF_INET6, (struct sockaddr*) &addr, sizeof(addr)));
-}
-
-
static void CALLBACK post_completion(void* context, BOOLEAN timed_out) {
uv_req_t* req;
uv_tcp_t* handle;
@@ -511,7 +498,9 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) {
}
if (!(handle->flags & UV_HANDLE_BOUND)) {
- err = uv_tcp_bind(handle, uv_addr_ip4_any_);
+ err = uv_tcp_try_bind(handle,
+ (const struct sockaddr*) &uv_addr_ip4_any_,
+ sizeof(uv_addr_ip4_any_));
if (err)
return err;
}
@@ -688,7 +677,9 @@ int uv__tcp_connect(uv_connect_t* req,
}
if (!(handle->flags & UV_HANDLE_BOUND)) {
- err = uv_tcp_bind(handle, uv_addr_ip4_any_);
+ err = uv_tcp_try_bind(handle,
+ (const struct sockaddr*) &uv_addr_ip4_any_,
+ sizeof(uv_addr_ip4_any_));
if (err)
return err;
}
@@ -745,7 +736,9 @@ int uv__tcp_connect6(uv_connect_t* req,
}
if (!(handle->flags & UV_HANDLE_BOUND)) {
- err = uv_tcp_bind6(handle, uv_addr_ip6_any_);
+ err = uv_tcp_try_bind(handle,
+ (const struct sockaddr*) &uv_addr_ip6_any_,
+ sizeof(uv_addr_ip6_any_));
if (err)
return err;
}
@@ -1413,3 +1406,19 @@ int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) {
return 0;
}
+
+
+/* This function is an egress point, i.e. it returns libuv errors rather than
+ * system errors.
+ */
+int uv__tcp_bind(uv_tcp_t* handle,
+ const struct sockaddr* addr,
+ unsigned int addrlen) {
+ int err;
+
+ err = uv_tcp_try_bind(handle, addr, addrlen);
+ if (err)
+ return uv_translate_sys_error(err);
+
+ return 0;
+}
diff --git a/test/benchmark-multi-accept.c b/test/benchmark-multi-accept.c
index 7b53a0e3..4fffbb7e 100644
--- a/test/benchmark-multi-accept.c
+++ b/test/benchmark-multi-accept.c
@@ -209,7 +209,7 @@ static void send_listen_handles(uv_handle_type type,
if (type == UV_TCP) {
ASSERT(0 == uv_tcp_init(loop, (uv_tcp_t*) &ctx.server_handle));
- ASSERT(0 == uv_tcp_bind((uv_tcp_t*) &ctx.server_handle, listen_addr));
+ ASSERT(0 == uv_tcp_bind((uv_tcp_t*) &ctx.server_handle, &listen_addr));
}
else
ASSERT(0);
diff --git a/test/benchmark-ping-pongs.c b/test/benchmark-ping-pongs.c
index a2bca507..f945a946 100644
--- a/test/benchmark-ping-pongs.c
+++ b/test/benchmark-ping-pongs.c
@@ -191,7 +191,7 @@ static void pinger_new(void) {
pinger->tcp.data = pinger;
- uv_tcp_bind(&pinger->tcp, client_addr);
+ uv_tcp_bind(&pinger->tcp, &client_addr);
r = uv_tcp_connect(&pinger->connect_req, &pinger->tcp, server_addr, pinger_connect_cb);
ASSERT(!r);
diff --git a/test/benchmark-pump.c b/test/benchmark-pump.c
index cc2f0eb8..1c1d4753 100644
--- a/test/benchmark-pump.c
+++ b/test/benchmark-pump.c
@@ -366,7 +366,7 @@ HELPER_IMPL(tcp_pump_server) {
server = (uv_stream_t*)&tcpServer;
r = uv_tcp_init(loop, &tcpServer);
ASSERT(r == 0);
- r = uv_tcp_bind(&tcpServer, listen_addr);
+ r = uv_tcp_bind(&tcpServer, &listen_addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&tcpServer, MAX_WRITE_HANDLES, connection_cb);
ASSERT(r == 0);
diff --git a/test/blackhole-server.c b/test/blackhole-server.c
index 6d0c620b..75f84563 100644
--- a/test/blackhole-server.c
+++ b/test/blackhole-server.c
@@ -108,7 +108,7 @@ HELPER_IMPL(tcp4_blackhole_server) {
r = uv_tcp_init(loop, &tcp_server);
ASSERT(r == 0);
- r = uv_tcp_bind(&tcp_server, addr);
+ r = uv_tcp_bind(&tcp_server, &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&tcp_server, 128, connection_cb);
diff --git a/test/dns-server.c b/test/dns-server.c
index 88a4e758..aabded55 100644
--- a/test/dns-server.c
+++ b/test/dns-server.c
@@ -305,7 +305,7 @@ static int dns_start(int port) {
return 1;
}
- r = uv_tcp_bind(&server, addr);
+ r = uv_tcp_bind(&server, &addr);
if (r) {
/* TODO: Error codes */
fprintf(stderr, "Bind error\n");
diff --git a/test/echo-server.c b/test/echo-server.c
index 674be97c..3b281005 100644
--- a/test/echo-server.c
+++ b/test/echo-server.c
@@ -229,7 +229,7 @@ static int tcp4_echo_start(int port) {
return 1;
}
- r = uv_tcp_bind(&tcpServer, addr);
+ r = uv_tcp_bind(&tcpServer, &addr);
if (r) {
/* TODO: Error codes */
fprintf(stderr, "Bind error\n");
@@ -264,7 +264,7 @@ static int tcp6_echo_start(int port) {
}
/* IPv6 is optional as not all platforms support it */
- r = uv_tcp_bind6(&tcpServer, addr6);
+ r = uv_tcp_bind6(&tcpServer, &addr6);
if (r) {
/* show message but return OK */
fprintf(stderr, "IPv6 not supported\n");
diff --git a/test/test-connection-fail.c b/test/test-connection-fail.c
index 670ae321..9f1b80af 100644
--- a/test/test-connection-fail.c
+++ b/test/test-connection-fail.c
@@ -101,7 +101,7 @@ static void connection_fail(uv_connect_cb connect_cb) {
/* We are never doing multiple reads/connects at a time anyway. */
/* so these handles can be pre-initialized. */
- uv_tcp_bind(&tcp, client_addr);
+ uv_tcp_bind(&tcp, &client_addr);
r = uv_tcp_connect(&req, &tcp, server_addr, connect_cb);
ASSERT(!r);
diff --git a/test/test-delayed-accept.c b/test/test-delayed-accept.c
index 5219f674..d1fffefa 100644
--- a/test/test-delayed-accept.c
+++ b/test/test-delayed-accept.c
@@ -108,7 +108,7 @@ static void start_server(void) {
r = uv_tcp_init(uv_default_loop(), server);
ASSERT(r == 0);
- r = uv_tcp_bind(server, addr);
+ r = uv_tcp_bind(server, &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)server, 128, connection_cb);
diff --git a/test/test-getsockname.c b/test/test-getsockname.c
index bb5e4c8a..8e991185 100644
--- a/test/test-getsockname.c
+++ b/test/test-getsockname.c
@@ -180,7 +180,7 @@ static int tcp_listener(void) {
return 1;
}
- r = uv_tcp_bind(&tcpServer, addr);
+ r = uv_tcp_bind(&tcpServer, &addr);
if (r) {
fprintf(stderr, "Bind error\n");
return 1;
diff --git a/test/test-ipc-send-recv.c b/test/test-ipc-send-recv.c
index f18f65ff..5119b317 100644
--- a/test/test-ipc-send-recv.c
+++ b/test/test-ipc-send-recv.c
@@ -145,7 +145,7 @@ TEST_IMPL(ipc_send_recv_tcp) {
r = uv_tcp_init(uv_default_loop(), &ctx.send.tcp);
ASSERT(r == 0);
- r = uv_tcp_bind(&ctx.send.tcp, addr);
+ r = uv_tcp_bind(&ctx.send.tcp, &addr);
ASSERT(r == 0);
r = run_test();
diff --git a/test/test-ipc.c b/test/test-ipc.c
index 769c1e22..adbc23a5 100644
--- a/test/test-ipc.c
+++ b/test/test-ipc.c
@@ -375,7 +375,7 @@ TEST_IMPL(listen_with_simultaneous_accepts) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, addr);
+ r = uv_tcp_bind(&server, &addr);
ASSERT(r == 0);
r = uv_tcp_simultaneous_accepts(&server, 1);
@@ -400,7 +400,7 @@ TEST_IMPL(listen_no_simultaneous_accepts) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, addr);
+ r = uv_tcp_bind(&server, &addr);
ASSERT(r == 0);
r = uv_tcp_simultaneous_accepts(&server, 0);
@@ -566,7 +566,7 @@ int ipc_helper(int listen_after_write) {
r = uv_tcp_init(uv_default_loop(), &tcp_server);
ASSERT(r == 0);
- r = uv_tcp_bind(&tcp_server, addr);
+ r = uv_tcp_bind(&tcp_server, &addr);
ASSERT(r == 0);
if (!listen_after_write) {
@@ -618,7 +618,7 @@ int ipc_helper_tcp_connection(void) {
ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr));
- r = uv_tcp_bind(&tcp_server, addr);
+ r = uv_tcp_bind(&tcp_server, &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&tcp_server, 12, ipc_on_connection_tcp_conn);
diff --git a/test/test-multiple-listen.c b/test/test-multiple-listen.c
index 3778175e..8ecacd0a 100644
--- a/test/test-multiple-listen.c
+++ b/test/test-multiple-listen.c
@@ -53,7 +53,7 @@ static void start_server(void) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, addr);
+ r = uv_tcp_bind(&server, &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&server, 128, connection_cb);
diff --git a/test/test-tcp-bind-error.c b/test/test-tcp-bind-error.c
index 1104618b..306372a7 100644
--- a/test/test-tcp-bind-error.c
+++ b/test/test-tcp-bind-error.c
@@ -42,12 +42,12 @@ TEST_IMPL(tcp_bind_error_addrinuse) {
ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr));
r = uv_tcp_init(uv_default_loop(), &server1);
ASSERT(r == 0);
- r = uv_tcp_bind(&server1, addr);
+ r = uv_tcp_bind(&server1, &addr);
ASSERT(r == 0);
r = uv_tcp_init(uv_default_loop(), &server2);
ASSERT(r == 0);
- r = uv_tcp_bind(&server2, addr);
+ r = uv_tcp_bind(&server2, &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&server1, 128, NULL);
@@ -78,7 +78,7 @@ TEST_IMPL(tcp_bind_error_addrnotavail_1) {
ASSERT(r == 0);
/* It seems that Linux is broken here - bind succeeds. */
- r = uv_tcp_bind(&server, addr);
+ r = uv_tcp_bind(&server, &addr);
ASSERT(r == 0 || r == UV_EADDRNOTAVAIL);
uv_close((uv_handle_t*)&server, close_cb);
@@ -101,7 +101,7 @@ TEST_IMPL(tcp_bind_error_addrnotavail_2) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, addr);
+ r = uv_tcp_bind(&server, &addr);
ASSERT(r == UV_EADDRNOTAVAIL);
uv_close((uv_handle_t*)&server, close_cb);
@@ -125,7 +125,7 @@ TEST_IMPL(tcp_bind_error_fault) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, *garbage_addr);
+ r = uv_tcp_bind(&server, garbage_addr);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
@@ -151,9 +151,9 @@ TEST_IMPL(tcp_bind_error_inval) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, addr1);
+ r = uv_tcp_bind(&server, &addr1);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, addr2);
+ r = uv_tcp_bind(&server, &addr2);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
@@ -176,7 +176,7 @@ TEST_IMPL(tcp_bind_localhost_ok) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind(&server, addr);
+ r = uv_tcp_bind(&server, &addr);
ASSERT(r == 0);
MAKE_VALGRIND_HAPPY();
diff --git a/test/test-tcp-bind6-error.c b/test/test-tcp-bind6-error.c
index ee9e2a72..e92afef7 100644
--- a/test/test-tcp-bind6-error.c
+++ b/test/test-tcp-bind6-error.c
@@ -43,12 +43,12 @@ TEST_IMPL(tcp_bind6_error_addrinuse) {
r = uv_tcp_init(uv_default_loop(), &server1);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server1, addr);
+ r = uv_tcp_bind6(&server1, &addr);
ASSERT(r == 0);
r = uv_tcp_init(uv_default_loop(), &server2);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server2, addr);
+ r = uv_tcp_bind6(&server2, &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&server1, 128, NULL);
@@ -77,7 +77,7 @@ TEST_IMPL(tcp_bind6_error_addrnotavail) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, addr);
+ r = uv_tcp_bind6(&server, &addr);
ASSERT(r == UV_EADDRNOTAVAIL);
uv_close((uv_handle_t*)&server, close_cb);
@@ -101,7 +101,7 @@ TEST_IMPL(tcp_bind6_error_fault) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, *garbage_addr);
+ r = uv_tcp_bind6(&server, garbage_addr);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
@@ -127,9 +127,9 @@ TEST_IMPL(tcp_bind6_error_inval) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, addr1);
+ r = uv_tcp_bind6(&server, &addr1);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, addr2);
+ r = uv_tcp_bind6(&server, &addr2);
ASSERT(r == UV_EINVAL);
uv_close((uv_handle_t*)&server, close_cb);
@@ -152,7 +152,7 @@ TEST_IMPL(tcp_bind6_localhost_ok) {
r = uv_tcp_init(uv_default_loop(), &server);
ASSERT(r == 0);
- r = uv_tcp_bind6(&server, addr);
+ r = uv_tcp_bind6(&server, &addr);
ASSERT(r == 0);
MAKE_VALGRIND_HAPPY();
diff --git a/test/test-tcp-close.c b/test/test-tcp-close.c
index a8a4586b..c692493f 100644
--- a/test/test-tcp-close.c
+++ b/test/test-tcp-close.c
@@ -85,7 +85,7 @@ static void start_server(uv_loop_t* loop, uv_tcp_t* handle) {
r = uv_tcp_init(loop, handle);
ASSERT(r == 0);
- r = uv_tcp_bind(handle, addr);
+ r = uv_tcp_bind(handle, &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)handle, 128, connection_cb);
diff --git a/test/test-tcp-unexpected-read.c b/test/test-tcp-unexpected-read.c
index 8ea86bac..377cc298 100644
--- a/test/test-tcp-unexpected-read.c
+++ b/test/test-tcp-unexpected-read.c
@@ -98,7 +98,7 @@ TEST_IMPL(tcp_unexpected_read) {
ASSERT(0 == uv_tcp_init(loop, &server_handle));
ASSERT(0 == uv_tcp_init(loop, &client_handle));
ASSERT(0 == uv_tcp_init(loop, &peer_handle));
- ASSERT(0 == uv_tcp_bind(&server_handle, addr));
+ ASSERT(0 == uv_tcp_bind(&server_handle, &addr));
ASSERT(0 == uv_listen((uv_stream_t*) &server_handle, 1, connection_cb));
ASSERT(0 == uv_tcp_connect(&connect_req, &client_handle, addr, connect_cb));
ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
diff --git a/test/test-tcp-write-to-half-open-connection.c b/test/test-tcp-write-to-half-open-connection.c
index f891c04b..fa197007 100644
--- a/test/test-tcp-write-to-half-open-connection.c
+++ b/test/test-tcp-write-to-half-open-connection.c
@@ -115,7 +115,7 @@ TEST_IMPL(tcp_write_to_half_open_connection) {
r = uv_tcp_init(loop, &tcp_server);
ASSERT(r == 0);
- r = uv_tcp_bind(&tcp_server, addr);
+ r = uv_tcp_bind(&tcp_server, &addr);
ASSERT(r == 0);
r = uv_listen((uv_stream_t*)&tcp_server, 1, connection_cb);