diff --git a/src/unix/tcp.c b/src/unix/tcp.c index 8c3b27b8..583cbfd6 100644 --- a/src/unix/tcp.c +++ b/src/unix/tcp.c @@ -76,26 +76,26 @@ out: } -int uv_tcp_bind(uv_tcp_t* tcp, struct sockaddr_in addr) { - if (addr.sin_family != AF_INET) { - uv_err_new(tcp->loop, EFAULT); +int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { + if (handle->type != UV_TCP || addr.sin_family != AF_INET) { + uv_err_new(handle->loop, EFAULT); return -1; } - return uv__tcp_bind(tcp, + return uv__tcp_bind(handle, AF_INET, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)); } -int uv_tcp_bind6(uv_tcp_t* tcp, struct sockaddr_in6 addr) { - if (addr.sin6_family != AF_INET6) { - uv_err_new(tcp->loop, EFAULT); +int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) { + if (handle->type != UV_TCP || addr.sin6_family != AF_INET6) { + uv_err_new(handle->loop, EFAULT); return -1; } - return uv__tcp_bind(tcp, + return uv__tcp_bind(handle, AF_INET6, (struct sockaddr*)&addr, sizeof(struct sockaddr_in6)); diff --git a/src/unix/udp.c b/src/unix/udp.c index bbd645f5..84e45107 100644 --- a/src/unix/udp.c +++ b/src/unix/udp.c @@ -444,6 +444,11 @@ int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) { int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, unsigned flags) { + if (handle->type != UV_UDP || addr.sin_family != AF_INET) { + uv_err_new(handle->loop, EFAULT); + return -1; + } + return uv__udp_bind(handle, AF_INET, (struct sockaddr*)&addr, @@ -453,6 +458,11 @@ 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) { + if (handle->type != UV_UDP || addr.sin6_family != AF_INET6) { + uv_err_new(handle->loop, EFAULT); + return -1; + } + return uv__udp_bind(handle, AF_INET6, (struct sockaddr*)&addr, diff --git a/src/win/tcp.c b/src/win/tcp.c index d909eb30..c4989e11 100644 --- a/src/win/tcp.c +++ b/src/win/tcp.c @@ -196,7 +196,7 @@ static int uv__bind(uv_loop_t* loop, uv_tcp_t* handle, int domain, int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { uv_loop_t* loop = handle->loop; - if (addr.sin_family != AF_INET) { + if (handle->type != UV_TCP || addr.sin_family != AF_INET) { uv_set_sys_error(loop, WSAEFAULT); return -1; } @@ -212,7 +212,7 @@ int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) { uv_loop_t* loop = handle->loop; - if (addr.sin6_family != AF_INET6) { + if (handle->type != UV_TCP || addr.sin6_family != AF_INET6) { uv_set_sys_error(loop, WSAEFAULT); return -1; } diff --git a/src/win/udp.c b/src/win/udp.c index 08449d0d..1d14fb83 100644 --- a/src/win/udp.c +++ b/src/win/udp.c @@ -198,7 +198,7 @@ int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, unsigned int flags) { uv_loop_t* loop = handle->loop; - if (addr.sin_family != AF_INET) { + if (handle->type != UV_UDP || addr.sin_family != AF_INET) { uv_set_sys_error(loop, WSAEFAULT); return -1; } @@ -215,7 +215,7 @@ int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, unsigned int flags) { uv_loop_t* loop = handle->loop; - if (addr.sin6_family != AF_INET6) { + if (handle->type != UV_UDP || addr.sin6_family != AF_INET6) { uv_set_sys_error(loop, WSAEFAULT); return -1; }