don't set SO_REUSEADDR by default; added GSocket_SetReuseAddr()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28463 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -277,6 +277,7 @@ GSocketError GSocket_GetSockOpt(GSocket *socket, int level, int optname,
|
|||||||
|
|
||||||
GSocketError GSocket_SetSockOpt(GSocket *socket, int level, int optname,
|
GSocketError GSocket_SetSockOpt(GSocket *socket, int level, int optname,
|
||||||
const void *optval, int optlen);
|
const void *optval, int optlen);
|
||||||
|
GSocketError GSocket_SetReuseAddr(GSocket *socket);
|
||||||
|
|
||||||
void GSocket_Streamed(GSocket *socket);
|
void GSocket_Streamed(GSocket *socket);
|
||||||
void GSocket_Unstreamed(GSocket *socket);
|
void GSocket_Unstreamed(GSocket *socket);
|
||||||
|
@@ -109,11 +109,11 @@ void GSocket_SetGUIFunctions(struct GSocketGUIFunctionsTable *guifunc)
|
|||||||
{
|
{
|
||||||
gs_gui_functions = guifunc;
|
gs_gui_functions = guifunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GSocket_Init(void)
|
int GSocket_Init(void)
|
||||||
{
|
{
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
|
|
||||||
if (gs_gui_functions)
|
if (gs_gui_functions)
|
||||||
{
|
{
|
||||||
if ( !gs_gui_functions->GUI_Init() )
|
if ( !gs_gui_functions->GUI_Init() )
|
||||||
@@ -130,7 +130,7 @@ void GSocket_Cleanup(void)
|
|||||||
{
|
{
|
||||||
gs_gui_functions->GUI_Cleanup();
|
gs_gui_functions->GUI_Cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cleanup WinSocket */
|
/* Cleanup WinSocket */
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
}
|
}
|
||||||
@@ -389,11 +389,6 @@ GSocketError GSocket_SetServer(GSocket *sck)
|
|||||||
ioctlsocket(sck->m_fd, FIONBIO, (u_long FAR *) &arg);
|
ioctlsocket(sck->m_fd, FIONBIO, (u_long FAR *) &arg);
|
||||||
_GSocket_Enable_Events(sck);
|
_GSocket_Enable_Events(sck);
|
||||||
|
|
||||||
/* allow a socket to re-bind if the socket is in the TIME_WAIT
|
|
||||||
state after being previously closed.
|
|
||||||
*/
|
|
||||||
setsockopt(sck->m_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&arg, sizeof(u_long));
|
|
||||||
|
|
||||||
/* Bind to the local address,
|
/* Bind to the local address,
|
||||||
* retrieve the actual address bound,
|
* retrieve the actual address bound,
|
||||||
* and listen up to 5 connections.
|
* and listen up to 5 connections.
|
||||||
@@ -777,7 +772,7 @@ GSocketEventFlags GSocket_Select(GSocket *socket, GSocketEventFlags flags)
|
|||||||
fd_set readfds;
|
fd_set readfds;
|
||||||
fd_set writefds;
|
fd_set writefds;
|
||||||
fd_set exceptfds;
|
fd_set exceptfds;
|
||||||
|
|
||||||
assert(socket != NULL);
|
assert(socket != NULL);
|
||||||
|
|
||||||
FD_ZERO(&readfds);
|
FD_ZERO(&readfds);
|
||||||
@@ -829,7 +824,7 @@ GSocketEventFlags GSocket_Select(GSocket *socket, GSocketEventFlags flags)
|
|||||||
{
|
{
|
||||||
socket->m_detected = GSOCK_LOST_FLAG;
|
socket->m_detected = GSOCK_LOST_FLAG;
|
||||||
socket->m_establishing = FALSE;
|
socket->m_establishing = FALSE;
|
||||||
|
|
||||||
/* LOST event: Abort any further processing */
|
/* LOST event: Abort any further processing */
|
||||||
return (GSOCK_LOST_FLAG & flags);
|
return (GSOCK_LOST_FLAG & flags);
|
||||||
}
|
}
|
||||||
@@ -1000,16 +995,25 @@ GSocketError GSocket_GetSockOpt(GSocket *socket, int level, int optname,
|
|||||||
return GSOCK_OPTERR;
|
return GSOCK_OPTERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
GSocketError GSocket_SetSockOpt(GSocket *socket, int level, int optname,
|
GSocketError GSocket_SetSockOpt(GSocket *socket, int level, int optname,
|
||||||
const void *optval, int optlen)
|
const void *optval, int optlen)
|
||||||
{
|
{
|
||||||
if (setsockopt(socket->m_fd, level, optname, optval, optlen) == 0)
|
if (setsockopt(socket->m_fd, level, optname, optval, optlen) == 0)
|
||||||
{
|
{
|
||||||
return GSOCK_NOERROR;
|
return GSOCK_NOERROR;
|
||||||
}
|
}
|
||||||
return GSOCK_OPTERR;
|
return GSOCK_OPTERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GSocketError GSocket_SetReuseAddr(GSocket *socket)
|
||||||
|
{
|
||||||
|
/* allow a socket to re-bind if the socket is in the TIME_WAIT
|
||||||
|
state after being previously closed.
|
||||||
|
*/
|
||||||
|
u_long arg = 1;
|
||||||
|
setsockopt(socket->m_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&arg, sizeof(u_long));
|
||||||
|
}
|
||||||
|
|
||||||
void GSocket_Streamed(GSocket *socket)
|
void GSocket_Streamed(GSocket *socket)
|
||||||
{
|
{
|
||||||
socket->m_stream = TRUE;
|
socket->m_stream = TRUE;
|
||||||
|
@@ -483,11 +483,6 @@ GSocketError GSocket_SetServer(GSocket *sck)
|
|||||||
#endif
|
#endif
|
||||||
_GSocket_Enable_Events(sck);
|
_GSocket_Enable_Events(sck);
|
||||||
|
|
||||||
/* allow a socket to re-bind if the socket is in the TIME_WAIT
|
|
||||||
state after being previously closed.
|
|
||||||
*/
|
|
||||||
setsockopt(sck->m_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&arg, sizeof(u_long));
|
|
||||||
|
|
||||||
/* Bind to the local address,
|
/* Bind to the local address,
|
||||||
* retrieve the actual address bound,
|
* retrieve the actual address bound,
|
||||||
* and listen up to 5 connections.
|
* and listen up to 5 connections.
|
||||||
@@ -1149,6 +1144,15 @@ GSocketError GSocket_SetSockOpt(GSocket *socket, int level, int optname,
|
|||||||
return GSOCK_OPTERR;
|
return GSOCK_OPTERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GSocketError GSocket_SetReuseAddr(GSocket *socket)
|
||||||
|
{
|
||||||
|
/* allow a socket to re-bind if the socket is in the TIME_WAIT
|
||||||
|
state after being previously closed.
|
||||||
|
*/
|
||||||
|
u_long arg = 1;
|
||||||
|
setsockopt(socket->m_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&arg, sizeof(u_long));
|
||||||
|
}
|
||||||
|
|
||||||
void GSocket_Streamed(GSocket *socket)
|
void GSocket_Streamed(GSocket *socket)
|
||||||
{
|
{
|
||||||
socket->m_stream = TRUE;
|
socket->m_stream = TRUE;
|
||||||
|
Reference in New Issue
Block a user