X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6c0d0845c205a59cb0d8c73c0e4bcc84a9d6c550..ce51dc7507f31a6baadb8709ac4b807cd2dad421:/src/common/socket.cpp diff --git a/src/common/socket.cpp b/src/common/socket.cpp index 95669073cd..0136da4a20 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -6,7 +6,7 @@ // Copyright: (C) 1999-1997, Guilhem Lavaux // (C) 2000-1999, Guillermo Rodriguez Garcia // RCS_ID: $Id$ -// License: see wxWindows license +// License: see wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ========================================================================== @@ -76,6 +76,8 @@ #define PROCESS_EVENTS() #endif // wxUSE_GUI/!wxUSE_GUI +#define wxTRACE_Socket _T("wxSocket") + // -------------------------------------------------------------------------- // wxWin macros // -------------------------------------------------------------------------- @@ -104,6 +106,8 @@ public: public: wxSocketState() : wxObject() {} + + DECLARE_NO_COPY_CLASS(wxSocketState) }; // ========================================================================== @@ -777,6 +781,12 @@ bool wxSocketBase::GetPeer(wxSockAddress& addr_man) const return FALSE; peer = GSocket_GetPeer(m_socket); + + // copying a null address would just trigger an assert anyway + + if (!peer) + return FALSE; + addr_man.SetAddress(peer); GAddress_destroy(peer); @@ -824,11 +834,11 @@ void wxSocketBase::RestoreState() wxNode *node; wxSocketState *state; - node = m_states.Last(); + node = m_states.GetLast(); if (!node) return; - state = (wxSocketState *)node->Data(); + state = (wxSocketState *)node->GetData(); m_flags = state->m_flags; m_notify = state->m_notify; @@ -1067,26 +1077,32 @@ wxSocketServer::wxSocketServer(wxSockAddress& addr_man, wxSocketFlags flags) : wxSocketBase(flags, wxSOCKET_SERVER) { - // Create the socket - m_socket = GSocket_new(); + wxLogTrace( wxTRACE_Socket, _T("Opening wxSocketServer") ); - if (!m_socket) - return; + m_socket = GSocket_new(); - // Setup the socket as server - GSocket_SetLocal(m_socket, addr_man.GetAddress()); - if (GSocket_SetServer(m_socket) != GSOCK_NOERROR) - { - GSocket_destroy(m_socket); - m_socket = NULL; - return; - } + if (!m_socket) + { + wxLogTrace( wxTRACE_Socket, _T("*** GSocket_new failed") ); + return; + } - GSocket_SetTimeout(m_socket, m_timeout * 1000); - GSocket_SetCallback(m_socket, GSOCK_INPUT_FLAG | GSOCK_OUTPUT_FLAG | - GSOCK_LOST_FLAG | GSOCK_CONNECTION_FLAG, - wx_socket_callback, (char *)this); + // Setup the socket as server + GSocket_SetLocal(m_socket, addr_man.GetAddress()); + if (GSocket_SetServer(m_socket) != GSOCK_NOERROR) + { + GSocket_destroy(m_socket); + m_socket = NULL; + + wxLogTrace( wxTRACE_Socket, _T("*** GSocket_SetServer failed") ); + return; + } + + GSocket_SetTimeout(m_socket, m_timeout * 1000); + GSocket_SetCallback(m_socket, GSOCK_INPUT_FLAG | GSOCK_OUTPUT_FLAG | + GSOCK_LOST_FLAG | GSOCK_CONNECTION_FLAG, + wx_socket_callback, (char *)this); } // -------------------------------------------------------------------------- @@ -1308,3 +1324,5 @@ IMPLEMENT_DYNAMIC_CLASS(wxSocketModule, wxModule) #endif // wxUSE_SOCKETS + +// vi:sts=4:sw=4:et