diff --git a/include/uv.h b/include/uv.h index a9d16b8a..31637e94 100644 --- a/include/uv.h +++ b/include/uv.h @@ -778,21 +778,18 @@ UV_EXTERN int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name, int* namelen); /* - * uv_tcp_connect, uv_tcp_connect6 - * These functions establish IPv4 and IPv6 TCP connections. Provide an - * initialized TCP handle and an uninitialized uv_connect_t*. The callback - * will be made when the connection is established. + * Establish an IPv4 or IPv6 TCP connection. Provide an initialized TCP handle + * and an uninitialized uv_connect_t*. `addr` should point to an initialized + * struct sockaddr_in or struct sockaddr_in6. + * + * The callback is made when the connection has been established or when a + * connection error happened. */ UV_EXTERN int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, - const struct sockaddr_in* addr, + const struct sockaddr* addr, uv_connect_cb cb); -UV_EXTERN int uv_tcp_connect6(uv_connect_t* req, - uv_tcp_t* handle, - const struct sockaddr_in6* addr, - uv_connect_cb cb); - /* uv_connect_t is a subclass of uv_req_t */ struct uv_connect_s { UV_REQ_FIELDS diff --git a/src/uv-common.c b/src/uv-common.c index c084594b..eb7862aa 100644 --- a/src/uv-common.c +++ b/src/uv-common.c @@ -236,31 +236,21 @@ int uv_udp_bind6(uv_udp_t* handle, int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, - const struct sockaddr_in* addr, + const struct sockaddr* addr, uv_connect_cb cb) { - if (handle->type == UV_TCP && addr->sin_family == AF_INET) { - return uv__tcp_connect(req, - handle, - (const struct sockaddr*) addr, - sizeof(*addr), - cb); - } - return UV_EINVAL; -} + unsigned int addrlen; + if (handle->type != UV_TCP) + return UV_EINVAL; -int uv_tcp_connect6(uv_connect_t* req, - uv_tcp_t* handle, - const struct sockaddr_in6* addr, - uv_connect_cb cb) { - if (handle->type == UV_TCP && addr->sin6_family == AF_INET6) { - return uv__tcp_connect(req, - handle, - (const struct sockaddr*) addr, - sizeof(*addr), - cb); - } - return UV_EINVAL; + if (addr->sa_family == AF_INET) + addrlen = sizeof(struct sockaddr_in); + else if (addr->sa_family == AF_INET6) + addrlen = sizeof(struct sockaddr_in6); + else + return UV_EINVAL; + + return uv__tcp_connect(req, handle, addr, addrlen, cb); } diff --git a/test/benchmark-multi-accept.c b/test/benchmark-multi-accept.c index 871b11aa..dbcba005 100644 --- a/test/benchmark-multi-accept.c +++ b/test/benchmark-multi-accept.c @@ -347,7 +347,7 @@ static void cl_close_cb(uv_handle_t* handle) { ASSERT(0 == uv_tcp_init(handle->loop, (uv_tcp_t*) &ctx->client_handle)); ASSERT(0 == uv_tcp_connect(&ctx->connect_req, (uv_tcp_t*) &ctx->client_handle, - &listen_addr, + (const struct sockaddr*) &listen_addr, cl_connect_cb)); } @@ -388,7 +388,7 @@ static int test_tcp(unsigned int num_servers, unsigned int num_clients) { ASSERT(0 == uv_tcp_init(loop, handle)); ASSERT(0 == uv_tcp_connect(&ctx->connect_req, handle, - &listen_addr, + (const struct sockaddr*) &listen_addr, cl_connect_cb)); ASSERT(0 == uv_idle_init(loop, &ctx->idle_handle)); } diff --git a/test/benchmark-ping-pongs.c b/test/benchmark-ping-pongs.c index fa475b62..a6306e32 100644 --- a/test/benchmark-ping-pongs.c +++ b/test/benchmark-ping-pongs.c @@ -195,7 +195,7 @@ static void pinger_new(void) { r = uv_tcp_connect(&pinger->connect_req, &pinger->tcp, - &server_addr, + (const struct sockaddr*) &server_addr, pinger_connect_cb); ASSERT(!r); } diff --git a/test/benchmark-pound.c b/test/benchmark-pound.c index 7531f55b..e8d87055 100644 --- a/test/benchmark-pound.c +++ b/test/benchmark-pound.c @@ -204,7 +204,10 @@ static void tcp_make_connect(conn_rec* p) { ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - r = uv_tcp_connect(&tp->conn_req, (uv_tcp_t*) &p->stream, &addr, connect_cb); + r = uv_tcp_connect(&tp->conn_req, + (uv_tcp_t*) &p->stream, + (const struct sockaddr*) &addr, + connect_cb); if (r) { fprintf(stderr, "uv_tcp_connect error %s\n", uv_err_name(r)); ASSERT(0); diff --git a/test/benchmark-pump.c b/test/benchmark-pump.c index af311857..eda3c142 100644 --- a/test/benchmark-pump.c +++ b/test/benchmark-pump.c @@ -240,7 +240,10 @@ static void maybe_connect_some(void) { ASSERT(r == 0); req = (uv_connect_t*) req_alloc(); - r = uv_tcp_connect(req, tcp, &connect_addr, connect_cb); + r = uv_tcp_connect(req, + tcp, + (const struct sockaddr*) &connect_addr, + connect_cb); ASSERT(r == 0); } else { pipe = &pipe_write_handles[max_connect_socket++]; diff --git a/test/benchmark-tcp-write-batch.c b/test/benchmark-tcp-write-batch.c index 09b93c24..96921b70 100644 --- a/test/benchmark-tcp-write-batch.c +++ b/test/benchmark-tcp-write-batch.c @@ -117,7 +117,10 @@ BENCHMARK_IMPL(tcp_write_batch) { r = uv_tcp_init(loop, &tcp_client); ASSERT(r == 0); - r = uv_tcp_connect(&connect_req, &tcp_client, &addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &tcp_client, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); start = uv_hrtime(); diff --git a/test/test-callback-stack.c b/test/test-callback-stack.c index ff6e93c4..accd5496 100644 --- a/test/test-callback-stack.c +++ b/test/test-callback-stack.c @@ -183,7 +183,10 @@ TEST_IMPL(callback_stack) { nested++; - if (uv_tcp_connect(&connect_req, &client, &addr, connect_cb)) { + if (uv_tcp_connect(&connect_req, + &client, + (const struct sockaddr*) &addr, + connect_cb)) { FATAL("uv_tcp_connect failed"); } nested--; diff --git a/test/test-connection-fail.c b/test/test-connection-fail.c index ffed0ab5..9b98c4d8 100644 --- a/test/test-connection-fail.c +++ b/test/test-connection-fail.c @@ -103,7 +103,10 @@ static void connection_fail(uv_connect_cb connect_cb) { /* so these handles can be pre-initialized. */ ASSERT(0 == uv_tcp_bind(&tcp, (const struct sockaddr*) &client_addr)); - r = uv_tcp_connect(&req, &tcp, &server_addr, connect_cb); + r = uv_tcp_connect(&req, + &tcp, + (const struct sockaddr*) &server_addr, + connect_cb); ASSERT(!r); uv_run(uv_default_loop(), UV_RUN_DEFAULT); diff --git a/test/test-delayed-accept.c b/test/test-delayed-accept.c index 434f7a62..f210d5fc 100644 --- a/test/test-delayed-accept.c +++ b/test/test-delayed-accept.c @@ -163,7 +163,10 @@ static void client_connect(void) { r = uv_tcp_init(uv_default_loop(), client); ASSERT(r == 0); - r = uv_tcp_connect(connect_req, client, &addr, connect_cb); + r = uv_tcp_connect(connect_req, + client, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); } diff --git a/test/test-getsockname.c b/test/test-getsockname.c index ab7c26df..7567420b 100644 --- a/test/test-getsockname.c +++ b/test/test-getsockname.c @@ -219,7 +219,10 @@ static void tcp_connector(void) { tcp.data = &connect_req; ASSERT(!r); - r = uv_tcp_connect(&connect_req, &tcp, &server_addr, on_connect); + r = uv_tcp_connect(&connect_req, + &tcp, + (const struct sockaddr*) &server_addr, + on_connect); ASSERT(!r); /* Fetch the actual port used by the connecting socket. */ diff --git a/test/test-ipc.c b/test/test-ipc.c index 97dfdbf3..d19affac 100644 --- a/test/test-ipc.c +++ b/test/test-ipc.c @@ -129,7 +129,7 @@ static void make_many_connections(void) { r = uv_tcp_connect(&conn->conn_req, (uv_tcp_t*) &conn->conn, - &addr, + (const struct sockaddr*) &addr, connect_cb); ASSERT(r == 0); @@ -632,7 +632,7 @@ int ipc_helper_tcp_connection(void) { r = uv_tcp_connect(&conn.conn_req, (uv_tcp_t*) &conn.conn, - &addr, + (const struct sockaddr*) &addr, connect_child_process_cb); ASSERT(r == 0); diff --git a/test/test-multiple-listen.c b/test/test-multiple-listen.c index 4853f4c4..3ce6233d 100644 --- a/test/test-multiple-listen.c +++ b/test/test-multiple-listen.c @@ -84,7 +84,10 @@ static void client_connect(void) { r = uv_tcp_init(uv_default_loop(), &client); ASSERT(r == 0); - r = uv_tcp_connect(connect_req, &client, &addr, connect_cb); + r = uv_tcp_connect(connect_req, + &client, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); } diff --git a/test/test-ping-pong.c b/test/test-ping-pong.c index 0c880d7d..fb8f5669 100644 --- a/test/test-ping-pong.c +++ b/test/test-ping-pong.c @@ -163,10 +163,10 @@ static void tcp_pinger_v6_new(void) { /* We are never doing multiple reads/connects at a time anyway. */ /* so these handles can be pre-initialized. */ - r = uv_tcp_connect6(&pinger->connect_req, - &pinger->stream.tcp, - &server_addr, - pinger_on_connect); + r = uv_tcp_connect(&pinger->connect_req, + &pinger->stream.tcp, + (const struct sockaddr*) &server_addr, + pinger_on_connect); ASSERT(!r); /* Synchronous connect callbacks are not allowed. */ @@ -193,7 +193,7 @@ static void tcp_pinger_new(void) { /* so these handles can be pre-initialized. */ r = uv_tcp_connect(&pinger->connect_req, &pinger->stream.tcp, - &server_addr, + (const struct sockaddr*) &server_addr, pinger_on_connect); ASSERT(!r); diff --git a/test/test-ref.c b/test/test-ref.c index 7bb4277a..ad2894c9 100644 --- a/test/test-ref.c +++ b/test/test-ref.c @@ -258,7 +258,10 @@ TEST_IMPL(tcp_ref3) { uv_tcp_t h; ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); uv_tcp_init(uv_default_loop(), &h); - uv_tcp_connect(&connect_req, &h, &addr, connect_and_shutdown); + uv_tcp_connect(&connect_req, + &h, + (const struct sockaddr*) &addr, + connect_and_shutdown); uv_unref((uv_handle_t*)&h); uv_run(uv_default_loop(), UV_RUN_DEFAULT); ASSERT(connect_cb_called == 1); @@ -274,7 +277,10 @@ TEST_IMPL(tcp_ref4) { uv_tcp_t h; ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); uv_tcp_init(uv_default_loop(), &h); - uv_tcp_connect(&connect_req, &h, &addr, connect_and_write); + uv_tcp_connect(&connect_req, + &h, + (const struct sockaddr*) &addr, + connect_and_write); uv_unref((uv_handle_t*)&h); uv_run(uv_default_loop(), UV_RUN_DEFAULT); ASSERT(connect_cb_called == 1); diff --git a/test/test-shutdown-close.c b/test/test-shutdown-close.c index ca308572..fd2d4b8a 100644 --- a/test/test-shutdown-close.c +++ b/test/test-shutdown-close.c @@ -72,7 +72,10 @@ TEST_IMPL(shutdown_close_tcp) { ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); r = uv_tcp_init(uv_default_loop(), &h); ASSERT(r == 0); - r = uv_tcp_connect(&connect_req, &h, &addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &h, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); ASSERT(r == 0); diff --git a/test/test-shutdown-eof.c b/test/test-shutdown-eof.c index 92e73124..58346361 100644 --- a/test/test-shutdown-eof.c +++ b/test/test-shutdown-eof.c @@ -160,7 +160,10 @@ TEST_IMPL(shutdown_eof) { r = uv_tcp_init(uv_default_loop(), &tcp); ASSERT(!r); - r = uv_tcp_connect(&connect_req, &tcp, &server_addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &tcp, + (const struct sockaddr*) &server_addr, + connect_cb); ASSERT(!r); uv_run(uv_default_loop(), UV_RUN_DEFAULT); diff --git a/test/test-tcp-close-while-connecting.c b/test/test-tcp-close-while-connecting.c index 9e835526..b9f7f966 100644 --- a/test/test-tcp-close-while-connecting.c +++ b/test/test-tcp-close-while-connecting.c @@ -63,7 +63,10 @@ TEST_IMPL(tcp_close_while_connecting) { loop = uv_default_loop(); ASSERT(0 == uv_ip4_addr("1.2.3.4", TEST_PORT, &addr)); ASSERT(0 == uv_tcp_init(loop, &tcp_handle)); - ASSERT(0 == uv_tcp_connect(&connect_req, &tcp_handle, &addr, connect_cb)); + ASSERT(0 == uv_tcp_connect(&connect_req, + &tcp_handle, + (const struct sockaddr*) &addr, + connect_cb)); ASSERT(0 == uv_timer_init(loop, &timer1_handle)); ASSERT(0 == uv_timer_start(&timer1_handle, timer1_cb, 50, 0)); ASSERT(0 == uv_timer_init(loop, &timer2_handle)); diff --git a/test/test-tcp-close.c b/test/test-tcp-close.c index 41712461..05af38c1 100644 --- a/test/test-tcp-close.c +++ b/test/test-tcp-close.c @@ -114,7 +114,10 @@ TEST_IMPL(tcp_close) { r = uv_tcp_init(loop, &tcp_handle); ASSERT(r == 0); - r = uv_tcp_connect(&connect_req, &tcp_handle, &addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &tcp_handle, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); ASSERT(write_cb_called == 0); diff --git a/test/test-tcp-connect-error-after-write.c b/test/test-tcp-connect-error-after-write.c index b437bf3b..3f2e3572 100644 --- a/test/test-tcp-connect-error-after-write.c +++ b/test/test-tcp-connect-error-after-write.c @@ -77,7 +77,10 @@ TEST_IMPL(tcp_connect_error_after_write) { r = uv_write(&write_req, (uv_stream_t*)&conn, &buf, 1, write_cb); ASSERT(r == UV_EBADF); - r = uv_tcp_connect(&connect_req, &conn, &addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &conn, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); r = uv_write(&write_req, (uv_stream_t*)&conn, &buf, 1, write_cb); diff --git a/test/test-tcp-connect-error.c b/test/test-tcp-connect-error.c index 278548ab..eab1eeb2 100644 --- a/test/test-tcp-connect-error.c +++ b/test/test-tcp-connect-error.c @@ -55,7 +55,10 @@ TEST_IMPL(tcp_connect_error_fault) { r = uv_tcp_init(uv_default_loop(), &server); ASSERT(r == 0); - r = uv_tcp_connect(&req, &server, garbage_addr, connect_cb); + r = uv_tcp_connect(&req, + &server, + (const struct sockaddr*) garbage_addr, + connect_cb); ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); diff --git a/test/test-tcp-connect-timeout.c b/test/test-tcp-connect-timeout.c index a14a89de..cc583caf 100644 --- a/test/test-tcp-connect-timeout.c +++ b/test/test-tcp-connect-timeout.c @@ -75,7 +75,10 @@ TEST_IMPL(tcp_connect_timeout) { r = uv_tcp_init(uv_default_loop(), &conn); ASSERT(r == 0); - r = uv_tcp_connect(&connect_req, &conn, &addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &conn, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); diff --git a/test/test-tcp-connect6-error.c b/test/test-tcp-connect6-error.c index c0e8262e..91ac0a3a 100644 --- a/test/test-tcp-connect6-error.c +++ b/test/test-tcp-connect6-error.c @@ -53,7 +53,10 @@ TEST_IMPL(tcp_connect6_error_fault) { r = uv_tcp_init(uv_default_loop(), &server); ASSERT(r == 0); - r = uv_tcp_connect6(&req, &server, garbage_addr, connect_cb); + r = uv_tcp_connect(&req, + &server, + (const struct sockaddr*) garbage_addr, + connect_cb); ASSERT(r == UV_EINVAL); uv_close((uv_handle_t*)&server, close_cb); diff --git a/test/test-tcp-open.c b/test/test-tcp-open.c index ddf8d500..edeacc70 100644 --- a/test/test-tcp-open.c +++ b/test/test-tcp-open.c @@ -164,7 +164,10 @@ TEST_IMPL(tcp_open) { r = uv_tcp_open(&client, sock); ASSERT(r == 0); - r = uv_tcp_connect(&connect_req, &client, &addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &client, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); uv_run(uv_default_loop(), UV_RUN_DEFAULT); diff --git a/test/test-tcp-read-stop.c b/test/test-tcp-read-stop.c index 3dc9d87d..c8d9c040 100644 --- a/test/test-tcp-read-stop.c +++ b/test/test-tcp-read-stop.c @@ -65,7 +65,10 @@ TEST_IMPL(tcp_read_stop) { ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); ASSERT(0 == uv_timer_init(uv_default_loop(), &timer_handle)); ASSERT(0 == uv_tcp_init(uv_default_loop(), &tcp_handle)); - ASSERT(0 == uv_tcp_connect(&connect_req, &tcp_handle, &addr, connect_cb)); + ASSERT(0 == uv_tcp_connect(&connect_req, + &tcp_handle, + (const struct sockaddr*) &addr, + connect_cb)); ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); MAKE_VALGRIND_HAPPY(); diff --git a/test/test-tcp-shutdown-after-write.c b/test/test-tcp-shutdown-after-write.c index de6f5575..c59acc40 100644 --- a/test/test-tcp-shutdown-after-write.c +++ b/test/test-tcp-shutdown-after-write.c @@ -118,7 +118,10 @@ TEST_IMPL(tcp_shutdown_after_write) { r = uv_tcp_init(loop, &conn); ASSERT(r == 0); - r = uv_tcp_connect(&connect_req, &conn, &addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &conn, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); r = uv_run(loop, UV_RUN_DEFAULT); diff --git a/test/test-tcp-unexpected-read.c b/test/test-tcp-unexpected-read.c index a1cc3277..3410cf08 100644 --- a/test/test-tcp-unexpected-read.c +++ b/test/test-tcp-unexpected-read.c @@ -100,7 +100,10 @@ TEST_IMPL(tcp_unexpected_read) { ASSERT(0 == uv_tcp_init(loop, &peer_handle)); ASSERT(0 == uv_tcp_bind(&server_handle, (const struct sockaddr*) &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_tcp_connect(&connect_req, + &client_handle, + (const struct sockaddr*) &addr, + connect_cb)); ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT)); /* This is somewhat inexact but the idea is that the event loop should not diff --git a/test/test-tcp-write-to-half-open-connection.c b/test/test-tcp-write-to-half-open-connection.c index ef135a50..92cc7d96 100644 --- a/test/test-tcp-write-to-half-open-connection.c +++ b/test/test-tcp-write-to-half-open-connection.c @@ -124,7 +124,10 @@ TEST_IMPL(tcp_write_to_half_open_connection) { r = uv_tcp_init(loop, &tcp_client); ASSERT(r == 0); - r = uv_tcp_connect(&connect_req, &tcp_client, &addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &tcp_client, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); r = uv_run(loop, UV_RUN_DEFAULT); diff --git a/test/test-tcp-writealot.c b/test/test-tcp-writealot.c index 88f499b5..6cfe2ebb 100644 --- a/test/test-tcp-writealot.c +++ b/test/test-tcp-writealot.c @@ -153,7 +153,10 @@ TEST_IMPL(tcp_writealot) { r = uv_tcp_init(uv_default_loop(), &client); ASSERT(r == 0); - r = uv_tcp_connect(&connect_req, &client, &addr, connect_cb); + r = uv_tcp_connect(&connect_req, + &client, + (const struct sockaddr*) &addr, + connect_cb); ASSERT(r == 0); uv_run(uv_default_loop(), UV_RUN_DEFAULT);