X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e5e41feafa1e1fe338ccc3fca63894b920f0ce96..ea804aadf91c963d97a56e152d8372c9e689affe:/src/common/socket.cpp diff --git a/src/common/socket.cpp b/src/common/socket.cpp index 67113941b3..2372865175 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -209,8 +209,6 @@ wxSocketBase::~wxSocketBase() // First, close the file descriptor. Close(); - m_internal->FinalizeSocket(); - if (m_unread) free(m_unread); // Unregister from the handler database. @@ -228,8 +226,8 @@ bool wxSocketBase::Close() { if (m_fd != INVALID_SOCKET) { - // Pause all running socket thread. - m_internal->PauseSocket(); + if (m_notify_state == TRUE) + Notify(FALSE); // Shutdown the connection. shutdown(m_fd, 2); @@ -547,18 +545,21 @@ void wxSocketBase::SetNotify(wxRequestNotify flags) m_neededreq = flags; if (m_neededreq == 0) - m_internal->DisableWaiter(); + m_internal->StopWaiter(); else Notify(m_notify_state); } void wxSocketBase::Notify(bool notify) { + m_notify_state = notify; + if (m_fd == INVALID_SOCKET) + return; + if (notify) - m_internal->EnableWaiter(); + m_internal->ResumeWaiter(); else - m_internal->DisableWaiter(); - m_notify_state = notify; + m_internal->StopWaiter(); } void wxSocketBase::OnRequest(wxRequestEvent req_evt) @@ -574,7 +575,7 @@ void wxSocketBase::OnRequest(wxRequestEvent req_evt) // OldOnNotify(req_evt); // We disable the event reporting. - SetNotify(m_neededreq & ~notify); + m_neededreq &= ~notify; } } @@ -586,14 +587,14 @@ wxSocketEvent::wxSocketEvent(int id) SetEventType(type); } -wxObject *wxSocketEvent::Clone() const +void wxSocketEvent::CopyObject(wxObject& obj_d) const { - wxSocketEvent *event = (wxSocketEvent *)wxEvent::Clone(); + wxSocketEvent *event = (wxSocketEvent *)&obj_d; + + wxEvent::CopyObject(obj_d); event->m_skevt = m_skevt; event->m_socket = m_socket; - - return event; } void wxSocketBase::OldOnNotify(wxRequestEvent evt) @@ -679,7 +680,7 @@ void wxSocketBase::WantBuffer(char *buffer, size_t nbytes, SockRequest *buf = new SockRequest; SaveState(); - m_internal->DisableWaiter(); + m_internal->StopWaiter(); buf->buffer = buffer; buf->size = nbytes; buf->done = FALSE; @@ -735,7 +736,7 @@ wxSocketServer::wxSocketServer(wxSockAddress& addr_man, return; } - m_internal->InitializeSocket(); + Notify(TRUE); } // -------------------------------------------------------------- @@ -746,8 +747,12 @@ bool wxSocketServer::AcceptWith(wxSocketBase& sock) { int fd2; - if ((fd2 = accept(m_fd, 0, 0)) < 0) + m_internal->AcquireFD(); + if ((fd2 = accept(m_fd, 0, 0)) < 0) { + m_internal->ReleaseFD(); return FALSE; + } + m_internal->ReleaseFD(); struct linger linger; linger.l_onoff = 0; @@ -762,7 +767,7 @@ bool wxSocketServer::AcceptWith(wxSocketBase& sock) sock.m_fd = fd2; sock.m_connected = TRUE; - sock.m_internal->InitializeSocket(); + sock.m_internal->ResumeWaiter(); return TRUE; } @@ -844,10 +849,6 @@ bool wxSocketClient::Connect(wxSockAddress& addr_man, bool WXUNUSED(wait) ) if (connect(m_fd, remote, len) != 0) return FALSE; - // Initializes the background threads ... - // -------------------------------------- - m_internal->InitializeSocket(); - // Enables bg events. // ------------------ Notify(TRUE); @@ -872,11 +873,10 @@ void wxSocketClient::OnRequest(wxRequestEvent evt) { if (m_connected) { - SetNotify(m_neededreq & ~REQ_CONNECT); + m_neededreq &= ~REQ_CONNECT; return; } m_connected = TRUE; - OldOnNotify(EVT_CONNECT); return; } wxSocketBase::OnRequest(evt);