X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..54590cb07847ca447411e8aefba0b01ccc24be22:/include/wx/socket.h diff --git a/include/wx/socket.h b/include/wx/socket.h index cd152bae2e..056de5ee5a 100644 --- a/include/wx/socket.h +++ b/include/wx/socket.h @@ -71,7 +71,9 @@ enum wxSOCKET_NOWAIT = 1, wxSOCKET_WAITALL = 2, wxSOCKET_BLOCK = 4, - wxSOCKET_REUSEADDR = 8 + wxSOCKET_REUSEADDR = 8, + wxSOCKET_BROADCAST = 16, + wxSOCKET_NOBIND = 32 }; enum wxSocketType @@ -108,19 +110,22 @@ public: bool Destroy(); // state - inline bool Ok() const { return (m_socket != NULL); }; - inline bool Error() const { return m_error; }; - inline bool IsConnected() const { return m_connected; }; - inline bool IsData() { return WaitForRead(0, 0); }; - inline bool IsDisconnected() const { return !IsConnected(); }; - inline wxUint32 LastCount() const { return m_lcount; } - inline wxSocketError LastError() const { return (wxSocketError)m_socket->GetError(); } + bool Ok() const { return IsOk(); } + bool IsOk() const { return (m_socket != NULL); } + bool Error() const { return m_error; } + bool IsClosed() const { return m_closed; } + bool IsConnected() const { return m_connected; } + bool IsData() { return WaitForRead(0, 0); } + bool IsDisconnected() const { return !IsConnected(); } + wxUint32 LastCount() const { return m_lcount; } + wxSocketError LastError() const { return (wxSocketError)m_socket->GetError(); } void SaveState(); void RestoreState(); // addresses virtual bool GetLocal(wxSockAddress& addr_man) const; virtual bool GetPeer(wxSockAddress& addr_man) const; + virtual bool SetLocal(const wxIPV4address& local); // base IO virtual bool Close(); @@ -132,19 +137,19 @@ public: wxSocketBase& Write(const void *buffer, wxUint32 nbytes); wxSocketBase& WriteMsg(const void *buffer, wxUint32 nbytes); - void InterruptWait() { m_interrupt = true; }; + void InterruptWait() { m_interrupt = true; } bool Wait(long seconds = -1, long milliseconds = 0); bool WaitForRead(long seconds = -1, long milliseconds = 0); bool WaitForWrite(long seconds = -1, long milliseconds = 0); bool WaitForLost(long seconds = -1, long milliseconds = 0); - inline wxSocketFlags GetFlags() const { return m_flags; } + wxSocketFlags GetFlags() const { return m_flags; } void SetFlags(wxSocketFlags flags); void SetTimeout(long seconds); bool GetOption(int level, int optname, void *optval, int *optlen); bool SetOption(int level, int optname, const void *optval, int optlen); - inline wxUint32 GetLastIOSize() const { return m_lcount; }; + wxUint32 GetLastIOSize() const { return m_lcount; } // event handling void *GetClientData() const { return m_clientData; } @@ -166,8 +171,8 @@ public: void OnRequest(wxSocketNotify notify); // do not use, not documented nor supported - inline bool IsNoWait() const { return ((m_flags & wxSOCKET_NOWAIT) != 0); } - inline wxSocketType GetType() const { return m_type; } + bool IsNoWait() const { return ((m_flags & wxSOCKET_NOWAIT) != 0); } + wxSocketType GetType() const { return m_type; } private: friend class wxSocketClient; @@ -195,12 +200,14 @@ private: bool m_reading; // busy reading? bool m_writing; // busy writing? bool m_error; // did last IO call fail? - wxSocketError m_lasterror; // last error (not cleared on success) + bool m_closed; // was the other end closed? + // (notice that m_error is also set then) wxUint32 m_lcount; // last IO transaction size unsigned long m_timeout; // IO timeout value wxList m_states; // stack of states bool m_interrupt; // interrupt ongoing wait operations? bool m_beingDeleted; // marked for delayed deletion? + wxIPV4address m_localAddress; // bind to local address? // pushback buffer void *m_unread; // pushback buffer @@ -217,7 +224,7 @@ private: // the initialization count, GSocket is initialized if > 0 static size_t m_countInit; - DECLARE_NO_COPY_CLASS(wxSocketBase) + DECLARE_NO_COPY_CLASS(wxSocketBase) }; @@ -230,7 +237,7 @@ class WXDLLIMPEXP_NET wxSocketServer : public wxSocketBase DECLARE_CLASS(wxSocketServer) public: - wxSocketServer(wxSockAddress& addr, wxSocketFlags flags = wxSOCKET_NONE); + wxSocketServer(const wxSockAddress& addr, wxSocketFlags flags = wxSOCKET_NONE); wxSocketBase* Accept(bool wait = true); bool AcceptWith(wxSocketBase& socket, bool wait = true); @@ -253,10 +260,29 @@ public: wxSocketClient(wxSocketFlags flags = wxSOCKET_NONE); virtual ~wxSocketClient(); - virtual bool Connect(wxSockAddress& addr, bool wait = true); + virtual bool Connect(const wxSockAddress& addr, bool wait = true); + bool Connect(const wxSockAddress& addr, const wxSockAddress& local, + bool wait = true); bool WaitOnConnect(long seconds = -1, long milliseconds = 0); + // Sets initial socket buffer sizes using the SO_SNDBUF and SO_RCVBUF options + // before calling connect (either one can be -1 to leave it unchanged) + void SetInitialSocketBuffers(int recv, int send) + { + m_initialRecvBufferSize = recv; + m_initialSendBufferSize = send; + } + +private: + virtual bool DoConnect(const wxSockAddress& addr, + const wxSockAddress* local, + bool wait = true); + + // buffer sizes, -1 if unset and defaults should be used + int m_initialRecvBufferSize; + int m_initialSendBufferSize; + DECLARE_NO_COPY_CLASS(wxSocketClient) }; @@ -272,12 +298,12 @@ class WXDLLIMPEXP_NET wxDatagramSocket : public wxSocketBase DECLARE_CLASS(wxDatagramSocket) public: - wxDatagramSocket(wxSockAddress& addr, wxSocketFlags flags = wxSOCKET_NONE); + wxDatagramSocket(const wxSockAddress& addr, wxSocketFlags flags = wxSOCKET_NONE); wxDatagramSocket& RecvFrom( wxSockAddress& addr, void* buf, wxUint32 nBytes ); - wxDatagramSocket& SendTo( wxSockAddress& addr, + wxDatagramSocket& SendTo( const wxSockAddress& addr, const void* buf, wxUint32 nBytes );