X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a737331db68b754c8bf31fa0a15f6d1f207b40bf..cfb50f14ecc87d39319a3f23ddbae938e7858c33:/src/common/socket.cpp diff --git a/src/common/socket.cpp b/src/common/socket.cpp index 0585cddd1b..c568508af1 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); @@ -545,20 +543,25 @@ void wxSocketBase::SetNotify(wxRequestNotify flags) if (m_type != SOCK_SERVER) flags &= ~REQ_ACCEPT; + m_internal->AcquireData(); m_neededreq = flags; + m_internal->ReleaseData(); 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 +577,7 @@ void wxSocketBase::OnRequest(wxRequestEvent req_evt) // OldOnNotify(req_evt); // We disable the event reporting. - SetNotify(m_neededreq & ~notify); + m_neededreq &= ~notify; } } @@ -586,14 +589,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 +682,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; @@ -690,10 +693,10 @@ void wxSocketBase::WantBuffer(char *buffer, size_t nbytes, buf->timeout = 1000; buf_timed_out = FALSE; - if (m_flags & SPEED) + if ((m_flags & SPEED) != 0) m_internal->QueueRequest(buf, FALSE); else - if (m_flags & NOWAIT) + if ((m_flags & NOWAIT) != 0) m_internal->QueueRequest(buf, TRUE); else m_internal->QueueRequest(buf, TRUE); @@ -735,7 +738,9 @@ wxSocketServer::wxSocketServer(wxSockAddress& addr_man, return; } - m_internal->InitializeSocket(); + m_internal->SetFD(m_fd); + + Notify(TRUE); } // -------------------------------------------------------------- @@ -746,8 +751,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 +771,9 @@ bool wxSocketServer::AcceptWith(wxSocketBase& sock) sock.m_fd = fd2; sock.m_connected = TRUE; - sock.m_internal->InitializeSocket(); + sock.m_internal->SetFD(fd2); + + sock.m_internal->ResumeWaiter(); return TRUE; } @@ -844,9 +855,7 @@ 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(); + m_internal->SetFD(m_fd); // Enables bg events. // ------------------ @@ -872,11 +881,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); @@ -1060,31 +1068,6 @@ wxSocketClient *wxSocketHandler::CreateClient(wxSocketBase::wxSockFlags flags) return client; } -#ifdef __WINDOWS__ -// -------------------------------------------------------------- -// --------- wxSocketHandler: Windows specific methods ---------- -// -------------------------------------------------------------- - -UINT wxSocketHandler::NewMessage(wxSocketBase *sock) -{ - internal->firstAvailableMsg++; - smsg_list->Append(internal->firstAvailableMsg, sock); - return internal->firstAvailableMsg; -} - -void wxSocketHandler::DestroyMessage(UINT msg) -{ - wxNode *node = smsg_list->Find(msg); - delete node; -} - -HWND wxSocketHandler::GetHWND() const -{ - return internal->sockWin; -} - -#endif - bool wxSocketModule::OnInit() { wxSocketHandler::master = new wxSocketHandler();