X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d775fa82354a1f8d5db87ad1d71ab00ef7d9123c..abb4f9c93715f5b00c526203af96ed2938a1a2c3:/src/common/socket.cpp diff --git a/src/common/socket.cpp b/src/common/socket.cpp index eb955def01..ec78106dc5 100644 --- a/src/common/socket.cpp +++ b/src/common/socket.cpp @@ -13,10 +13,6 @@ // Declarations // ========================================================================== -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "socket.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -40,6 +36,7 @@ #include "wx/sckaddr.h" #include "wx/socket.h" +#include "wx/stopwatch.h" // DLL options compatibility check: #include "wx/build.h" @@ -98,7 +95,7 @@ public: public: wxSocketState() : wxObject() {} - DECLARE_NO_COPY_CLASS(wxSocketState) + DECLARE_NO_COPY_CLASS(wxSocketState) }; // ========================================================================== @@ -132,6 +129,11 @@ bool wxSocketBase::Initialize() BTW, the main thread must not be stopped using sleep or block on a semaphore (a bad idea in any case) or socket operations will time out. + + On the Mac side, Initialize() stores a pointer to the CFRunLoop for + the main thread. Because secondary threads do not have run loops, + adding event notifications to the "Current" loop would have no + effect at all, events would never fire. */ wxASSERT_MSG( wxIsMainThread(), wxT("Call wxSocketBase::Initialize() from the main thread first!")); @@ -760,7 +762,7 @@ bool wxSocketBase::WaitForRead(long seconds, long milliseconds) return true; // Note that GSOCK_INPUT_LOST has to be explicitly passed to - // _Wait becuase of the semantics of WaitForRead: a return + // _Wait because of the semantics of WaitForRead: a return // value of true means that a GSocket_Read call will return // immediately, not that there is actually data to read. @@ -1051,7 +1053,7 @@ wxUint32 wxSocketBase::GetPushback(void *buffer, wxUint32 size, bool peek) // Ctor // -------------------------------------------------------------------------- -wxSocketServer::wxSocketServer(wxSockAddress& addr_man, +wxSocketServer::wxSocketServer(const wxSockAddress& addr_man, wxSocketFlags flags) : wxSocketBase(flags, wxSOCKET_SERVER) { @@ -1148,6 +1150,8 @@ bool wxSocketServer::WaitForAccept(long seconds, long milliseconds) bool wxSocketBase::GetOption(int level, int optname, void *optval, int *optlen) { + wxASSERT_MSG( m_socket, _T("Socket not initialised") ); + if (m_socket->GetSockOpt(level, optname, optval, optlen) != GSOCK_NOERROR) { @@ -1159,6 +1163,8 @@ bool wxSocketBase::GetOption(int level, int optname, void *optval, int *optlen) bool wxSocketBase::SetOption(int level, int optname, const void *optval, int optlen) { + wxASSERT_MSG( m_socket, _T("Socket not initialised") ); + if (m_socket->SetSockOpt(level, optname, optval, optlen) != GSOCK_NOERROR) { @@ -1254,7 +1260,7 @@ bool wxSocketClient::WaitOnConnect(long seconds, long milliseconds) /* NOTE: experimental stuff - might change */ -wxDatagramSocket::wxDatagramSocket( wxSockAddress& addr, +wxDatagramSocket::wxDatagramSocket( const wxSockAddress& addr, wxSocketFlags flags ) : wxSocketBase( flags, wxSOCKET_DATAGRAM ) { @@ -1294,10 +1300,12 @@ wxDatagramSocket& wxDatagramSocket::RecvFrom( wxSockAddress& addr, return (*this); } -wxDatagramSocket& wxDatagramSocket::SendTo( wxSockAddress& addr, +wxDatagramSocket& wxDatagramSocket::SendTo( const wxSockAddress& addr, const void* buf, wxUint32 nBytes ) { + wxASSERT_MSG( m_socket, _T("Socket not initialised") ); + m_socket->SetPeer(addr.GetAddress()); Write(buf, nBytes); return (*this);