win/udp: DRY up setting SO_REUSEADDR

This patch makes sure that only uv_udp_set_socket sets the SO_REUSEADDR
bit for UDP sockets.
This commit is contained in:
Bert Belder 2013-01-26 05:16:49 +01:00
parent 3d779000b1
commit f21d94125e

View File

@ -64,6 +64,16 @@ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket,
assert(handle->socket == INVALID_SOCKET);
/* Set SO_REUSEADDR on the socket. */
if (setsockopt(socket,
SOL_SOCKET,
SO_REUSEADDR,
(char*) &yes,
sizeof yes) == SOCKET_ERROR) {
uv__set_sys_error(loop, WSAGetLastError());
return -1;
}
/* Set the socket to nonblocking mode */
if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) {
uv__set_sys_error(loop, WSAGetLastError());
@ -210,16 +220,6 @@ static int uv__bind(uv_udp_t* handle,
sizeof no);
}
r = setsockopt(handle->socket,
SOL_SOCKET,
SO_REUSEADDR,
(char*) &yes,
sizeof yes);
if (r == SOCKET_ERROR) {
uv__set_sys_error(handle->loop, WSAGetLastError());
return -1;
}
r = bind(handle->socket, addr, addrsize);
if (r == SOCKET_ERROR) {
uv__set_sys_error(handle->loop, WSAGetLastError());
@ -656,7 +656,6 @@ int uv_udp_set_broadcast(uv_udp_t* handle, int value) {
int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) {
int r;
WSAPROTOCOL_INFOW protocol_info;
int opt_len;
DWORD yes = 1;
@ -679,16 +678,6 @@ int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) {
return -1;
}
r = setsockopt(handle->socket,
SOL_SOCKET,
SO_REUSEADDR,
(char*) &yes,
sizeof yes);
if (r == SOCKET_ERROR) {
uv__set_sys_error(handle->loop, WSAGetLastError());
return -1;
}
return 0;
}