diff --git a/src/unix/udp.c b/src/unix/udp.c index 56c1b250..49028985 100644 --- a/src/unix/udp.c +++ b/src/unix/udp.c @@ -35,13 +35,13 @@ static void uv__udp_io(uv_loop_t* loop, uv__io_t* w, unsigned int revents); static void uv__udp_recvmsg(uv_loop_t* loop, uv__io_t* w, unsigned int revents); static void uv__udp_sendmsg(uv_loop_t* loop, uv__io_t* w, unsigned int revents); static int uv__udp_maybe_deferred_bind(uv_udp_t* handle, int domain); -static int uv__udp_send(uv_udp_send_t* req, - uv_udp_t* handle, - uv_buf_t bufs[], - int bufcnt, - struct sockaddr* addr, - socklen_t addrlen, - uv_udp_send_cb send_cb); +static int uv__send(uv_udp_send_t* req, + uv_udp_t* handle, + uv_buf_t bufs[], + int bufcnt, + struct sockaddr* addr, + socklen_t addrlen, + uv_udp_send_cb send_cb); void uv__udp_close(uv_udp_t* handle) { @@ -413,13 +413,13 @@ static int uv__udp_maybe_deferred_bind(uv_udp_t* handle, int domain) { } -static int uv__udp_send(uv_udp_send_t* req, - uv_udp_t* handle, - uv_buf_t bufs[], - int bufcnt, - struct sockaddr* addr, - socklen_t addrlen, - uv_udp_send_cb send_cb) { +static int uv__send(uv_udp_send_t* req, + uv_udp_t* handle, + uv_buf_t bufs[], + int bufcnt, + struct sockaddr* addr, + socklen_t addrlen, + uv_udp_send_cb send_cb) { assert(bufcnt > 0); if (uv__udp_maybe_deferred_bind(handle, addr->sa_family)) @@ -645,41 +645,41 @@ out: } -int uv_udp_send(uv_udp_send_t* req, - uv_udp_t* handle, - uv_buf_t bufs[], - int bufcnt, - struct sockaddr_in addr, - uv_udp_send_cb send_cb) { - return uv__udp_send(req, - handle, - bufs, - bufcnt, - (struct sockaddr*)&addr, - sizeof addr, - send_cb); -} - - -int uv_udp_send6(uv_udp_send_t* req, +int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, - struct sockaddr_in6 addr, + struct sockaddr_in addr, uv_udp_send_cb send_cb) { - return uv__udp_send(req, - handle, - bufs, - bufcnt, - (struct sockaddr*)&addr, - sizeof addr, - send_cb); + return uv__send(req, + handle, + bufs, + bufcnt, + (struct sockaddr*)&addr, + sizeof addr, + send_cb); } -int uv_udp_recv_start(uv_udp_t* handle, - uv_alloc_cb alloc_cb, - uv_udp_recv_cb recv_cb) { +int uv__udp_send6(uv_udp_send_t* req, + uv_udp_t* handle, + uv_buf_t bufs[], + int bufcnt, + struct sockaddr_in6 addr, + uv_udp_send_cb send_cb) { + return uv__send(req, + handle, + bufs, + bufcnt, + (struct sockaddr*)&addr, + sizeof addr, + send_cb); +} + + +int uv__udp_recv_start(uv_udp_t* handle, + uv_alloc_cb alloc_cb, + uv_udp_recv_cb recv_cb) { if (alloc_cb == NULL || recv_cb == NULL) { uv__set_artificial_error(handle->loop, UV_EINVAL); return -1; @@ -703,7 +703,7 @@ int uv_udp_recv_start(uv_udp_t* handle, } -int uv_udp_recv_stop(uv_udp_t* handle) { +int uv__udp_recv_stop(uv_udp_t* handle) { uv__io_stop(handle->loop, &handle->io_watcher, UV__POLLIN); if (!uv__io_active(&handle->io_watcher, UV__POLLOUT)) diff --git a/src/uv-common.c b/src/uv-common.c index 660c33ed..8c9d323a 100644 --- a/src/uv-common.c +++ b/src/uv-common.c @@ -254,6 +254,53 @@ int uv_tcp_connect6(uv_connect_t* req, } +int uv_udp_send(uv_udp_send_t* req, + uv_udp_t* handle, + uv_buf_t bufs[], + int bufcnt, + struct sockaddr_in addr, + uv_udp_send_cb send_cb) { + if (handle->type != UV_UDP || addr.sin_family != AF_INET) { + return uv__set_artificial_error(handle->loop, UV_EINVAL); + } + + return uv__udp_send(req, handle, bufs, bufcnt, addr, send_cb); +} + + +int uv_udp_send6(uv_udp_send_t* req, + uv_udp_t* handle, + uv_buf_t bufs[], + int bufcnt, + struct sockaddr_in6 addr, + uv_udp_send_cb send_cb) { + if (handle->type != UV_UDP || addr.sin6_family != AF_INET6) { + return uv__set_artificial_error(handle->loop, UV_EINVAL); + } + + return uv__udp_send6(req, handle, bufs, bufcnt, addr, send_cb); +} + + +int uv_udp_recv_start(uv_udp_t* handle, + uv_alloc_cb alloc_cb, + uv_udp_recv_cb recv_cb) { + if (handle->type != UV_UDP || alloc_cb == NULL || recv_cb == NULL) { + return uv__set_artificial_error(handle->loop, UV_EINVAL); + } + + return uv__udp_recv_start(handle, alloc_cb, recv_cb); +} + + +int uv_udp_recv_stop(uv_udp_t* handle) { + if (handle->type != UV_UDP) { + return uv__set_artificial_error(handle->loop, UV_EINVAL); + } + + return uv__udp_recv_stop(handle); +} + #ifdef _WIN32 static UINT __stdcall uv__thread_start(void *ctx_v) #else diff --git a/src/uv-common.h b/src/uv-common.h index d4d1c8b2..4ba85169 100644 --- a/src/uv-common.h +++ b/src/uv-common.h @@ -93,6 +93,25 @@ int uv__tcp_connect6(uv_connect_t* req, struct sockaddr_in6 address, uv_connect_cb cb); +int uv__udp_send(uv_udp_send_t* req, + uv_udp_t* handle, + uv_buf_t bufs[], + int bufcnt, + struct sockaddr_in addr, + uv_udp_send_cb send_cb); + +int uv__udp_send6(uv_udp_send_t* req, + uv_udp_t* handle, + uv_buf_t bufs[], + int bufcnt, + struct sockaddr_in6 addr, + uv_udp_send_cb send_cb); + +int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloccb, + uv_udp_recv_cb recv_cb); + +int uv__udp_recv_stop(uv_udp_t* handle); + void uv__fs_poll_close(uv_fs_poll_t* handle); diff --git a/src/win/udp.c b/src/win/udp.c index 23410528..b6b6e0f7 100644 --- a/src/win/udp.c +++ b/src/win/udp.c @@ -341,7 +341,7 @@ static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) { } -int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, +int uv__udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb) { uv_loop_t* loop = handle->loop; @@ -371,7 +371,7 @@ int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, } -int uv_udp_recv_stop(uv_udp_t* handle) { +int uv__udp_recv_stop(uv_udp_t* handle) { if (handle->flags & UV_HANDLE_READING) { handle->flags &= ~UV_HANDLE_READING; handle->loop->active_udp_streams--; @@ -382,7 +382,7 @@ int uv_udp_recv_stop(uv_udp_t* handle) { } -static int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], +static int uv__send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, struct sockaddr* addr, int addr_len, uv_udp_send_cb cb) { uv_loop_t* loop = handle->loop; DWORD result, bytes; @@ -424,7 +424,7 @@ static int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], } -int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], +int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, struct sockaddr_in addr, uv_udp_send_cb cb) { if (!(handle->flags & UV_HANDLE_BOUND) && @@ -432,17 +432,17 @@ int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], return -1; } - return uv__udp_send(req, - handle, - bufs, - bufcnt, - (struct sockaddr*) &addr, - sizeof addr, - cb); + return uv__send(req, + handle, + bufs, + bufcnt, + (struct sockaddr*) &addr, + sizeof addr, + cb); } -int uv_udp_send6(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], +int uv__udp_send6(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, struct sockaddr_in6 addr, uv_udp_send_cb cb) { if (!(handle->flags & UV_HANDLE_BOUND) && @@ -450,13 +450,13 @@ int uv_udp_send6(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], return -1; } - return uv__udp_send(req, - handle, - bufs, - bufcnt, - (struct sockaddr*) &addr, - sizeof addr, - cb); + return uv__send(req, + handle, + bufs, + bufcnt, + (struct sockaddr*) &addr, + sizeof addr, + cb); }