don't remove/add back the socket to the list of inputs monitored by the event loop all the time but just leave it there until the socket is destroyed; this should be beneficial from performance point of view (although hard to measure) and also makes the code simpler
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57610 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -52,12 +52,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
virtual void DoClose()
|
virtual void DoClose()
|
||||||
{
|
{
|
||||||
wxSocketManager * const manager = wxSocketManager::Get();
|
DisableEvents();
|
||||||
if ( manager )
|
|
||||||
{
|
|
||||||
manager->Uninstall_Callback(this, wxSOCKET_INPUT);
|
|
||||||
manager->Uninstall_Callback(this, wxSOCKET_OUTPUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
close(m_fd);
|
close(m_fd);
|
||||||
}
|
}
|
||||||
@@ -78,10 +73,6 @@ private:
|
|||||||
void DoEnableEvents(bool enable);
|
void DoEnableEvents(bool enable);
|
||||||
|
|
||||||
|
|
||||||
// enable or disable events for the given event
|
|
||||||
void EnableEvent(wxSocketNotify event);
|
|
||||||
void DisableEvent(wxSocketNotify event);
|
|
||||||
|
|
||||||
int Recv_Stream(void *buffer, int size);
|
int Recv_Stream(void *buffer, int size);
|
||||||
int Recv_Dgram(void *buffer, int size);
|
int Recv_Dgram(void *buffer, int size);
|
||||||
int Send_Stream(const void *buffer, int size);
|
int Send_Stream(const void *buffer, int size);
|
||||||
|
@@ -493,9 +493,6 @@ int wxSocketImplUnix::Read(void *buffer, int size)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disable events during query of socket status */
|
|
||||||
DisableEvent(wxSOCKET_INPUT);
|
|
||||||
|
|
||||||
/* Read the data */
|
/* Read the data */
|
||||||
if (m_stream)
|
if (m_stream)
|
||||||
ret = Recv_Stream(buffer, size);
|
ret = Recv_Stream(buffer, size);
|
||||||
@@ -525,9 +522,6 @@ int wxSocketImplUnix::Read(void *buffer, int size)
|
|||||||
m_error = wxSOCKET_IOERR;
|
m_error = wxSOCKET_IOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable events again now that we are done processing */
|
|
||||||
EnableEvent(wxSOCKET_INPUT);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -557,15 +551,6 @@ int wxSocketImplUnix::Write(const void *buffer, int size)
|
|||||||
{
|
{
|
||||||
m_error = wxSOCKET_IOERR;
|
m_error = wxSOCKET_IOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only reenable OUTPUT events after an error (just like WSAAsyncSelect
|
|
||||||
* in MSW). Once the first OUTPUT event is received, users can assume
|
|
||||||
* that the socket is writable until a read operation fails. Only then
|
|
||||||
* will further OUTPUT events be posted.
|
|
||||||
*/
|
|
||||||
EnableEvent(wxSOCKET_OUTPUT);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -573,16 +558,6 @@ int wxSocketImplUnix::Write(const void *buffer, int size)
|
|||||||
|
|
||||||
/* Flags */
|
/* Flags */
|
||||||
|
|
||||||
void wxSocketImplUnix::EnableEvent(wxSocketNotify event)
|
|
||||||
{
|
|
||||||
wxSocketManager::Get()->Install_Callback(this, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxSocketImplUnix::DisableEvent(wxSocketNotify event)
|
|
||||||
{
|
|
||||||
wxSocketManager::Get()->Uninstall_Callback(this, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxSocketImplUnix::Recv_Stream(void *buffer, int size)
|
int wxSocketImplUnix::Recv_Stream(void *buffer, int size)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@@ -690,7 +665,6 @@ int wxSocketImplUnix::Send_Dgram(const void *buffer, int size)
|
|||||||
|
|
||||||
void wxSocketImplUnix::OnStateChange(wxSocketNotify event)
|
void wxSocketImplUnix::OnStateChange(wxSocketNotify event)
|
||||||
{
|
{
|
||||||
DisableEvent(event);
|
|
||||||
NotifyOnStateChange(event);
|
NotifyOnStateChange(event);
|
||||||
|
|
||||||
if ( event == wxSOCKET_LOST )
|
if ( event == wxSOCKET_LOST )
|
||||||
|
Reference in New Issue
Block a user