Renamed GSocket_SetBlocking to GSocket_SetNonBlocking and *Fallback to *Callback
Added GSocket_SetTimeout Added timeout support in wxSocket (as it was in previous releases) Updated documentation git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3215 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -88,6 +88,8 @@ GSocket *GSocket_new()
|
||||
socket->m_stream = TRUE;
|
||||
socket->m_gui_dependent = NULL;
|
||||
socket->m_blocking = FALSE;
|
||||
socket->m_timeout = 10*60*1000;
|
||||
// 10 minutes * 60 sec * 1000 millisec
|
||||
|
||||
/* We initialize the GUI specific entries here */
|
||||
_GSocket_GUI_Init(socket);
|
||||
@@ -132,7 +134,7 @@ void GSocket_Shutdown(GSocket *socket)
|
||||
|
||||
/* We also disable GUI callbacks */
|
||||
for (evt=0;evt<GSOCK_MAX_EVENT;evt++)
|
||||
_GSocket_Uninstall_Fallback(socket, evt);
|
||||
_GSocket_Uninstall_Callback(socket, evt);
|
||||
}
|
||||
|
||||
/* Address handling */
|
||||
@@ -267,6 +269,9 @@ GSocketError GSocket_SetServer(GSocket *sck)
|
||||
return GSOCK_IOERR;
|
||||
}
|
||||
|
||||
GSocket_SetNonBlocking(sck, sck->m_blocking);
|
||||
GSocket_SetTimeout(sck, sck->m_timeout);
|
||||
|
||||
return GSOCK_NOERROR;
|
||||
}
|
||||
|
||||
@@ -338,6 +343,9 @@ GSocketError GSocket_SetNonOriented(GSocket *sck)
|
||||
return GSOCK_IOERR;
|
||||
}
|
||||
|
||||
GSocket_SetBlocking(sck, sck->m_blocking);
|
||||
GSocket_SetTimeout(sck, sck->m_timeout);
|
||||
|
||||
return GSOCK_NOERROR;
|
||||
}
|
||||
|
||||
@@ -393,6 +401,9 @@ GSocketError GSocket_Connect(GSocket *sck, GSocketStream stream)
|
||||
/* It is not a server */
|
||||
sck->m_server = FALSE;
|
||||
|
||||
GSocket_SetBlocking(sck, sck->m_blocking);
|
||||
GSocket_SetTimeout(sck, sck->m_timeout);
|
||||
|
||||
return GSOCK_NOERROR;
|
||||
}
|
||||
|
||||
@@ -461,10 +472,10 @@ bool GSocket_DataAvailable(GSocket *socket)
|
||||
/* Flags */
|
||||
|
||||
/*
|
||||
GSocket_SetBlocking() puts the socket in non-blocking mode. This is useful
|
||||
GSocket_SetNonBlocking() puts the socket in non-blocking mode. This is useful
|
||||
if we don't want to wait.
|
||||
*/
|
||||
void GSocket_SetBlocking(GSocket *socket, bool block)
|
||||
void GSocket_SetNonBlocking(GSocket *socket, bool block)
|
||||
{
|
||||
assert(socket != NULL);
|
||||
|
||||
@@ -474,6 +485,24 @@ void GSocket_SetBlocking(GSocket *socket, bool block)
|
||||
ioctl(socket->m_fd, FIONBIO, &block);
|
||||
}
|
||||
|
||||
/*
|
||||
* GSocket_SetTimeout()
|
||||
*/
|
||||
void GSocket_SetTimeout(GSocket *socket, unsigned long millisec)
|
||||
{
|
||||
assert(socket != NULL);
|
||||
|
||||
socket->m_timeout = millisec;
|
||||
if (socket->m_fd != -1) {
|
||||
struct timeval tval;
|
||||
|
||||
tval.tv_sec = millisec / 1000;
|
||||
tval.tv_usec = (millisec % 1000) * 1000;
|
||||
setsockopt(socket->m_fd, SOL_SOCKET, SO_SNDTIMEO, &tval, sizeof(tval));
|
||||
setsockopt(socket->m_fd, SOL_SOCKET, SO_RCVTIMEO, &tval, sizeof(tval));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
GSocket_GetError() returns the last error occured on the socket stream.
|
||||
*/
|
||||
@@ -498,7 +527,7 @@ GSocketError GSocket_GetError(GSocket *socket)
|
||||
Server socket -> a client request a connection
|
||||
LOST: the connection is lost
|
||||
|
||||
SetFallback accepts a combination of these flags so a same callback can
|
||||
SetCallback accepts a combination of these flags so a same callback can
|
||||
receive different events.
|
||||
|
||||
An event is generated only once and its state is reseted when the relative
|
||||
@@ -506,8 +535,8 @@ GSocketError GSocket_GetError(GSocket *socket)
|
||||
For example: INPUT -> GSocket_Read()
|
||||
CONNECTION -> GSocket_Accept()
|
||||
*/
|
||||
void GSocket_SetFallback(GSocket *socket, GSocketEventFlags event,
|
||||
GSocketFallback fallback, char *cdata)
|
||||
void GSocket_SetCallback(GSocket *socket, GSocketEventFlags event,
|
||||
GSocketCallback fallback, char *cdata)
|
||||
{
|
||||
int count;
|
||||
|
||||
@@ -520,17 +549,17 @@ void GSocket_SetFallback(GSocket *socket, GSocketEventFlags event,
|
||||
socket->m_fbacks[count] = fallback;
|
||||
socket->m_data[count] = cdata;
|
||||
|
||||
_GSocket_Install_Fallback(socket, count);
|
||||
_GSocket_Install_Callback(socket, count);
|
||||
_GSocket_Enable(socket, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
UnsetFallback will disables all fallbacks specified by "event".
|
||||
UnsetCallback will disables all fallbacks specified by "event".
|
||||
NOTE: event may be a combination of flags
|
||||
*/
|
||||
void GSocket_UnsetFallback(GSocket *socket, GSocketEventFlags event)
|
||||
void GSocket_UnsetCallback(GSocket *socket, GSocketEventFlags event)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
@@ -540,7 +569,7 @@ void GSocket_UnsetFallback(GSocket *socket, GSocketEventFlags event)
|
||||
if ((event & (1 << count)) != 0) {
|
||||
_GSocket_Disable(socket, count);
|
||||
socket->m_fbacks[count] = NULL;
|
||||
_GSocket_Uninstall_Fallback(socket, count);
|
||||
_GSocket_Uninstall_Callback(socket, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -567,14 +596,14 @@ void _GSocket_Enable(GSocket *socket, GSocketEvent event)
|
||||
{
|
||||
socket->m_iocalls[event] = TRUE;
|
||||
if (socket->m_fbacks[event])
|
||||
_GSocket_Install_Fallback(socket, event);
|
||||
_GSocket_Install_Callback(socket, event);
|
||||
}
|
||||
|
||||
void _GSocket_Disable(GSocket *socket, GSocketEvent event)
|
||||
{
|
||||
socket->m_iocalls[event] = FALSE;
|
||||
if (socket->m_fbacks[event])
|
||||
_GSocket_Uninstall_Fallback(socket, event);
|
||||
_GSocket_Uninstall_Callback(socket, event);
|
||||
}
|
||||
|
||||
int _GSocket_Recv_Stream(GSocket *socket, char *buffer, int size)
|
||||
|
Reference in New Issue
Block a user