X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d5b12ad9a71615729a2dae61246a897f5e515e04..e0e3a32dac4d8c000bbe1a365cca29f286144769:/src/common/socket.cpp diff --git a/src/common/socket.cpp b/src/common/socket.cpp index 603736e1a2..5e8f4ff8de 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -31,7 +31,7 @@ #include "wx/defs.h" #include "wx/object.h" #include "wx/string.h" -#include "wx/stopwatch.h" +#include "wx/timer.h" #include "wx/utils.h" #include "wx/module.h" #include "wx/log.h" @@ -54,7 +54,7 @@ WX_CHECK_BUILD_OPTIONS("wxNet") // what to do within waits: we have 2 cases: from the main thread itself we // have to call wxYield() to let the events (including the GUI events and the -// low-level (not wxWindows) events from GSocket) be processed. From another +// low-level (not wxWidgets) events from GSocket) be processed. From another // thread it is enough to just call wxThread::Yield() which will give away the // rest of our time slice: the explanation is that the events will be processed // by the main thread anyhow, without calling wxYield(), but we don't want to @@ -94,10 +94,6 @@ public: wxSocketEventFlags m_eventmask; bool m_notify; void *m_clientData; -#if WXWIN_COMPATIBILITY - wxSocketBase::wxSockCbk m_cbk; - char *m_cdata; -#endif // WXWIN_COMPATIBILITY public: wxSocketState() : wxObject() {} @@ -184,10 +180,6 @@ void wxSocketBase::Init() m_clientData = NULL; m_notify = FALSE; m_eventmask = 0; -#if WXWIN_COMPATIBILITY - m_cbk = NULL; - m_cdata = NULL; -#endif // WXWIN_COMPATIBILITY if ( !IsInitialized() ) { @@ -311,7 +303,6 @@ wxSocketBase& wxSocketBase::Read(void* buffer, wxUint32 nbytes) wxUint32 wxSocketBase::_Read(void* buffer, wxUint32 nbytes) { int total; - int ret = 1; // Try the pushback buffer first total = GetPushback(buffer, nbytes, FALSE); @@ -333,6 +324,7 @@ wxUint32 wxSocketBase::_Read(void* buffer, wxUint32 nbytes) // wxSOCKET_BLOCK // wxSOCKET_NONE // + int ret; if (m_flags & wxSOCKET_NOWAIT) { GSocket_SetNonBlocking(m_socket, 1); @@ -512,7 +504,6 @@ wxSocketBase& wxSocketBase::Write(const void *buffer, wxUint32 nbytes) wxUint32 wxSocketBase::_Write(const void *buffer, wxUint32 nbytes) { wxUint32 total = 0; - int ret = 1; // If the socket is invalid or parameters are ill, return immediately if (!m_socket || !buffer || !nbytes) @@ -524,6 +515,7 @@ wxUint32 wxSocketBase::_Write(const void *buffer, wxUint32 nbytes) // wxSOCKET_BLOCK // wxSOCKET_NONE // + int ret; if (m_flags & wxSOCKET_NOWAIT) { GSocket_SetNonBlocking(m_socket, 1); @@ -686,6 +678,10 @@ bool wxSocketBase::_Wait(long seconds, else timeout = m_timeout * 1000; +#if !defined(wxUSE_GUI) || !wxUSE_GUI + GSocket_SetTimeout(m_socket, timeout); +#endif + // Wait in an active polling loop. // // NOTE: We duplicate some of the code in OnRequest, but this doesn't @@ -758,6 +754,7 @@ bool wxSocketBase::WaitForRead(long seconds, long milliseconds) GSOCK_LOST_FLAG); } + bool wxSocketBase::WaitForWrite(long seconds, long milliseconds) { return _Wait(seconds, milliseconds, GSOCK_OUTPUT_FLAG); @@ -824,10 +821,6 @@ void wxSocketBase::SaveState() state->m_notify = m_notify; state->m_eventmask = m_eventmask; state->m_clientData = m_clientData; -#if WXWIN_COMPATIBILITY - state->m_cbk = m_cbk; - state->m_cdata = m_cdata; -#endif // WXWIN_COMPATIBILITY m_states.Append(state); } @@ -847,11 +840,7 @@ void wxSocketBase::RestoreState() m_notify = state->m_notify; m_eventmask = state->m_eventmask; m_clientData = state->m_clientData; -#if WXWIN_COMPATIBILITY - m_cbk = state->m_cbk; - m_cdata = state->m_cdata; -#endif // WXWIN_COMPATIBILITY - + m_states.Erase(node); delete state; } @@ -874,30 +863,6 @@ void wxSocketBase::SetFlags(wxSocketFlags flags) } -// -------------------------------------------------------------------------- -// Callbacks (now obsolete - use events instead) -// -------------------------------------------------------------------------- - -#if WXWIN_COMPATIBILITY - -wxSocketBase::wxSockCbk wxSocketBase::Callback(wxSockCbk cbk_) -{ - wxSockCbk old_cbk = cbk_; - - m_cbk = cbk_; - return old_cbk; -} - -char *wxSocketBase::CallbackData(char *data) -{ - char *old_data = m_cdata; - - m_cdata = data; - return old_data; -} - -#endif // WXWIN_COMPATIBILITY - // -------------------------------------------------------------------------- // Event handling // -------------------------------------------------------------------------- @@ -970,6 +935,7 @@ void wxSocketBase::OnRequest(wxSocketNotify notification) // Schedule the event wxSocketEventFlags flag = 0; + wxUnusedVar(flag); switch (notification) { case GSOCK_INPUT: flag = GSOCK_INPUT_FLAG; break; @@ -992,11 +958,6 @@ void wxSocketBase::OnRequest(wxSocketNotify notification) m_handler->AddPendingEvent(event); } - -#if WXWIN_COMPATIBILITY - if (m_cbk) - m_cbk(*this, notification, m_cdata); -#endif // WXWIN_COMPATIBILITY } } @@ -1166,6 +1127,27 @@ bool wxSocketServer::WaitForAccept(long seconds, long milliseconds) return _Wait(seconds, milliseconds, GSOCK_CONNECTION_FLAG); } +bool wxSocketBase::GetOption(int level, int optname, void *optval, int *optlen) +{ + if (GSocket_GetSockOpt(m_socket, level, optname, optval, optlen) + != GSOCK_NOERROR) + { + return FALSE; + } + return TRUE; +} + +bool wxSocketBase::SetOption(int level, int optname, const void *optval, + int optlen) +{ + if (GSocket_SetSockOpt(m_socket, level, optname, optval, optlen) + != GSOCK_NOERROR) + { + return FALSE; + } + return TRUE; +} + // ========================================================================== // wxSocketClient // ========================================================================== @@ -1261,9 +1243,12 @@ wxDatagramSocket::wxDatagramSocket( wxSockAddress& addr, m_socket = GSocket_new(); if(!m_socket) + { + wxASSERT_MSG( 0, _T("datagram socket not new'd") ); return; - + } // Setup the socket as non connection oriented + GSocket_Unstreamed(m_socket); GSocket_SetLocal(m_socket, addr.GetAddress()); if( GSocket_SetNonOriented(m_socket) != GSOCK_NOERROR ) {