include: merge uv_udp_send and uv_udp_send6

Merge uv_udp_send6() into uv_udp_send().  uv_udp_send() now takes a
const struct sockaddr*.
This commit is contained in:
Ben Noordhuis 2013-09-04 01:48:50 +02:00
parent bcee403ed2
commit 08c6ddeefb
12 changed files with 65 additions and 75 deletions

View File

@ -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)

View File

@ -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);
}

View File

@ -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));
}

View File

@ -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));
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);