diff --git a/engine/common/net_ws.c b/engine/common/net_ws.c index ecc985f0..aa7b5bf2 100644 --- a/engine/common/net_ws.c +++ b/engine/common/net_ws.c @@ -169,6 +169,12 @@ qboolean NET_MakeSocketNonBlocking( int socket_fd ) return true; } +qboolean NET_MakeSocketReuseAddr( int socket_fd ) +{ + uint opt = 1; + return !NET_IsSocketError( setsockopt( socket_fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&opt, sizeof( opt ))); +} + void NET_NetadrToIP6Bytes( uint8_t *ip6, const netadr_t *adr ) { memcpy( &ip6[0], adr->ip6_0, 2 ); @@ -1609,7 +1615,7 @@ static int NET_IPSocket( const char *net_iface, int port, int family ) Con_DPrintf( S_WARN "%s: port: %d setsockopt SO_BROADCAST: %s\n", __func__, port, NET_ErrorString( )); } - if( NET_IsSocketError( setsockopt( net_socket, SOL_SOCKET, SO_REUSEADDR, (const char *)&optval, sizeof( optval )))) + if( !NET_MakeSocketReuseAddr( net_socket )) { Con_DPrintf( S_WARN "%s: port: %d setsockopt SO_REUSEADDR: %s\n", __func__, port, NET_ErrorString( )); closesocket( net_socket ); diff --git a/engine/common/net_ws.h b/engine/common/net_ws.h index fea44ae3..6530faac 100644 --- a/engine/common/net_ws.h +++ b/engine/common/net_ws.h @@ -77,6 +77,7 @@ void NET_NetadrToIP6Bytes( uint8_t *ip6, const netadr_t *adr ); qboolean NET_IsSocketError( int retval ); qboolean NET_IsSocketValid( int socket ); qboolean NET_MakeSocketNonBlocking( int socket_fd ); +qboolean NET_MakeSocketReuseAddr( int socket_fd ); static inline qboolean NET_IsLocalAddress( netadr_t adr ) {