unix,win: Check bind receives right socket type

This commit is contained in:
Erick Tryzelaar 2011-09-25 16:24:52 -07:00 committed by Ryan Dahl
parent c260a39645
commit 1d7e61fafa
4 changed files with 22 additions and 12 deletions

View File

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

View File

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

View File

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

View File

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