diff --git a/include/uv.h b/include/uv.h index b784d179..134759f6 100644 --- a/include/uv.h +++ b/include/uv.h @@ -995,31 +995,9 @@ UV_EXTERN int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, const uv_buf_t bufs[], unsigned int nbufs, - const struct sockaddr_in* addr, + const struct sockaddr* addr, uv_udp_send_cb send_cb); -/* - * Send data. If the socket has not previously been bound with `uv_udp_bind6`, - * it is bound to ::0 (the "all interfaces" address) and a random port number. - * - * Arguments: - * req UDP request handle. Need not be initialized. - * handle UDP handle. Should have been initialized with `uv_udp_init`. - * bufs List of buffers to send. - * nbufs Number of buffers in `bufs`. - * addr Address of the remote peer. See `uv_ip6_addr`. - * send_cb Callback to invoke when the data has been sent out. - * - * Returns: - * 0 on success, or an error code < 0 on failure. - */ -UV_EXTERN int uv_udp_send6(uv_udp_send_t* req, - uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr_in6* addr, - uv_udp_send_cb send_cb); - /* * Receive data. If the socket has not previously been bound with `uv_udp_bind` * or `uv_udp_bind6`, it is bound to 0.0.0.0 (the "all interfaces" address) diff --git a/src/uv-common.c b/src/uv-common.c index 631a7cd6..6cfd1085 100644 --- a/src/uv-common.c +++ b/src/uv-common.c @@ -251,37 +251,21 @@ int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, const uv_buf_t bufs[], unsigned int nbufs, - const struct sockaddr_in* addr, + const struct sockaddr* addr, uv_udp_send_cb send_cb) { - if (handle->type == UV_UDP && addr->sin_family == AF_INET) { - return uv__udp_send(req, - handle, - bufs, - nbufs, - (const struct sockaddr*) addr, - sizeof(*addr), - send_cb); - } - return UV_EINVAL; -} + unsigned int addrlen; + if (handle->type != UV_UDP) + return UV_EINVAL; -int uv_udp_send6(uv_udp_send_t* req, - uv_udp_t* handle, - const uv_buf_t bufs[], - unsigned int nbufs, - const struct sockaddr_in6* addr, - uv_udp_send_cb send_cb) { - if (handle->type == UV_UDP && addr->sin6_family == AF_INET6) { - return uv__udp_send(req, - handle, - bufs, - nbufs, - (const struct sockaddr*) addr, - sizeof(*addr), - send_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__udp_send(req, handle, bufs, nbufs, addr, addrlen, send_cb); } diff --git a/test/benchmark-udp-pummel.c b/test/benchmark-udp-pummel.c index 0ec18aae..f8f702c0 100644 --- a/test/benchmark-udp-pummel.c +++ b/test/benchmark-udp-pummel.c @@ -100,7 +100,7 @@ send: &s->udp_handle, bufs, ARRAY_SIZE(bufs), - &s->addr, + (const struct sockaddr*) &s->addr, send_cb)); send_cb_called++; } @@ -195,7 +195,7 @@ static int pummel(unsigned int n_senders, &s->udp_handle, bufs, ARRAY_SIZE(bufs), - &s->addr, + (const struct sockaddr*) &s->addr, send_cb)); } diff --git a/test/echo-server.c b/test/echo-server.c index a4c151b5..193a168d 100644 --- a/test/echo-server.c +++ b/test/echo-server.c @@ -195,7 +195,6 @@ static void on_recv(uv_udp_t* handle, unsigned flags) { uv_udp_send_t* req; uv_buf_t sndbuf; - int r; ASSERT(nread > 0); ASSERT(addr->sa_family == AF_INET); @@ -204,13 +203,7 @@ static void on_recv(uv_udp_t* handle, ASSERT(req != NULL); sndbuf = *rcvbuf; - r = uv_udp_send(req, - handle, - &sndbuf, - 1, - (const struct sockaddr_in*) addr, - on_send); - ASSERT(r == 0); + ASSERT(0 == uv_udp_send(req, handle, &sndbuf, 1, addr, on_send)); } diff --git a/test/test-getsockname.c b/test/test-getsockname.c index 8ceee16f..dc6a949b 100644 --- a/test/test-getsockname.c +++ b/test/test-getsockname.c @@ -313,7 +313,12 @@ static void udp_sender(void) { buf = uv_buf_init("PING", 4); ASSERT(0 == uv_ip4_addr("127.0.0.1", server_port, &server_addr)); - r = uv_udp_send(&send_req, &udp, &buf, 1, &server_addr, udp_send); + r = uv_udp_send(&send_req, + &udp, + &buf, + 1, + (const struct sockaddr*) &server_addr, + udp_send); ASSERT(!r); } diff --git a/test/test-ref.c b/test/test-ref.c index f8925d89..ca44ec41 100644 --- a/test/test-ref.c +++ b/test/test-ref.c @@ -326,7 +326,12 @@ TEST_IMPL(udp_ref3) { ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); uv_udp_init(uv_default_loop(), &h); - uv_udp_send(&req, &h, &buf, 1, &addr, (uv_udp_send_cb)req_cb); + uv_udp_send(&req, + &h, + &buf, + 1, + (const struct sockaddr*) &addr, + (uv_udp_send_cb) req_cb); uv_unref((uv_handle_t*)&h); uv_run(uv_default_loop(), UV_RUN_DEFAULT); ASSERT(req_cb_called == 1); diff --git a/test/test-udp-dgram-too-big.c b/test/test-udp-dgram-too-big.c index ecbafa96..bd44c425 100644 --- a/test/test-udp-dgram-too-big.c +++ b/test/test-udp-dgram-too-big.c @@ -70,7 +70,12 @@ TEST_IMPL(udp_dgram_too_big) { buf = uv_buf_init(dgram, sizeof dgram); ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - r = uv_udp_send(&req_, &handle_, &buf, 1, &addr, send_cb); + r = uv_udp_send(&req_, + &handle_, + &buf, + 1, + (const struct sockaddr*) &addr, + send_cb); ASSERT(r == 0); ASSERT(close_cb_called == 0); diff --git a/test/test-udp-ipv6.c b/test/test-udp-ipv6.c index ea7ff337..32cabf09 100644 --- a/test/test-udp-ipv6.c +++ b/test/test-udp-ipv6.c @@ -120,7 +120,12 @@ static void do_test(uv_udp_recv_cb recv_cb, int bind_flags) { buf = uv_buf_init("PING", 4); ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr)); - r = uv_udp_send(&req_, &client, &buf, 1, &addr, send_cb); + r = uv_udp_send(&req_, + &client, + &buf, + 1, + (const struct sockaddr*) &addr, + send_cb); ASSERT(r == 0); r = uv_timer_init(uv_default_loop(), &timeout); diff --git a/test/test-udp-multicast-join.c b/test/test-udp-multicast-join.c index ebaf742b..686edf3d 100644 --- a/test/test-udp-multicast-join.c +++ b/test/test-udp-multicast-join.c @@ -124,7 +124,12 @@ TEST_IMPL(udp_multicast_join) { buf = uv_buf_init("PING", 4); /* server sends "PING" */ - r = uv_udp_send(&req, &server, &buf, 1, &addr, sv_send_cb); + r = uv_udp_send(&req, + &server, + &buf, + 1, + (const struct sockaddr*) &addr, + sv_send_cb); ASSERT(r == 0); ASSERT(close_cb_called == 0); diff --git a/test/test-udp-multicast-ttl.c b/test/test-udp-multicast-ttl.c index b3c0e11b..bed0ea13 100644 --- a/test/test-udp-multicast-ttl.c +++ b/test/test-udp-multicast-ttl.c @@ -72,7 +72,12 @@ TEST_IMPL(udp_multicast_ttl) { /* server sends "PING" */ buf = uv_buf_init("PING", 4); ASSERT(0 == uv_ip4_addr("239.255.0.1", TEST_PORT, &addr)); - r = uv_udp_send(&req, &server, &buf, 1, &addr, sv_send_cb); + r = uv_udp_send(&req, + &server, + &buf, + 1, + (const struct sockaddr*) &addr, + sv_send_cb); ASSERT(r == 0); ASSERT(close_cb_called == 0); diff --git a/test/test-udp-open.c b/test/test-udp-open.c index b23b8a25..9a97303f 100644 --- a/test/test-udp-open.c +++ b/test/test-udp-open.c @@ -146,7 +146,12 @@ TEST_IMPL(udp_open) { r = uv_udp_recv_start(&client, alloc_cb, recv_cb); ASSERT(r == 0); - r = uv_udp_send(&send_req, &client, &buf, 1, &addr, send_cb); + r = uv_udp_send(&send_req, + &client, + &buf, + 1, + (const struct sockaddr*) &addr, + send_cb); ASSERT(r == 0); uv_run(uv_default_loop(), UV_RUN_DEFAULT); diff --git a/test/test-udp-send-and-recv.c b/test/test-udp-send-and-recv.c index 9c73333f..aa9a31c3 100644 --- a/test/test-udp-send-and-recv.c +++ b/test/test-udp-send-and-recv.c @@ -152,12 +152,7 @@ static void sv_recv_cb(uv_udp_t* handle, ASSERT(req != NULL); sndbuf = uv_buf_init("PONG", 4); - r = uv_udp_send(req, - handle, - &sndbuf, - 1, - (const struct sockaddr_in*) addr, - sv_send_cb); + r = uv_udp_send(req, handle, &sndbuf, 1, addr, sv_send_cb); ASSERT(r == 0); sv_recv_cb_called++; @@ -189,7 +184,12 @@ TEST_IMPL(udp_send_and_recv) { /* client sends "PING", expects "PONG" */ buf = uv_buf_init("PING", 4); - r = uv_udp_send(&req, &client, &buf, 1, &addr, cl_send_cb); + r = uv_udp_send(&req, + &client, + &buf, + 1, + (const struct sockaddr*) &addr, + cl_send_cb); ASSERT(r == 0); ASSERT(close_cb_called == 0);