class wxGSocketIOHandler;
-class GSocket
+class GSocket : public GSocketBase
{
public:
- GSocket();
+ GSocket(wxSocketBase& wxsocket);
virtual ~GSocket();
- bool IsOk() { return m_ok; }
- void Close();
- void Shutdown();
- GSocketError SetLocal(GAddress *address);
- GSocketError SetPeer(GAddress *address);
- GAddress *GetLocal();
- GAddress *GetPeer();
+
+ virtual void Close();
+ virtual void Shutdown();
+ virtual GSocket *WaitConnection(wxSocketBase& wxsocket);
+
GSocketError SetServer();
- GSocket *WaitConnection();
bool SetReusable();
bool SetBroadcast();
bool DontDoBind();
GSocketError SetNonOriented();
int Read(char *buffer, int size);
int Write(const char *buffer, int size);
- GSocketEventFlags Select(GSocketEventFlags flags);
void SetNonBlocking(bool non_block);
- void SetTimeout(unsigned long millisec);
GSocketError WXDLLIMPEXP_NET GetError();
- void SetCallback(GSocketEventFlags flags,
- GSocketCallback callback, char *cdata);
- void UnsetCallback(GSocketEventFlags flags);
GSocketError GetSockOpt(int level, int optname, void *optval, int *optlen);
GSocketError SetSockOpt(int level, int optname,
const void *optval, int optlen);
//attach or detach from main loop
void Notify(bool flag);
- virtual void Detected_Read();
- virtual void Detected_Write();
- void SetInitialSocketBuffers(int recv, int send)
- {
- m_initialRecvBufferSize = recv;
- m_initialSendBufferSize = send;
- }
+ void Detected_Read();
+ void Detected_Write();
protected:
//enable or disable event callback using gsocket gui callback table
int Recv_Dgram(char *buffer, int size);
int Send_Stream(const char *buffer, int size);
int Send_Dgram(const char *buffer, int size);
- bool m_ok;
- int m_initialRecvBufferSize;
- int m_initialSendBufferSize;
public:
/* DFE: We can't protect these data member until the GUI code is updated */
/* protected: */
- int m_fd;
wxGSocketIOHandler *m_handler;
- GAddress *m_local;
- GAddress *m_peer;
- GSocketError m_error;
-
- bool m_non_blocking;
- bool m_server;
- bool m_stream;
- bool m_establishing;
- bool m_reusable;
- bool m_broadcast;
- bool m_dobind;
- unsigned long m_timeout;
// true if socket should fire events
bool m_use_events;
- /* Callbacks */
- GSocketEventFlags m_detected;
- GSocketCallback m_cbacks[GSOCK_MAX_EVENT];
- char *m_data[GSOCK_MAX_EVENT];
-
// pointer for storing extra (usually GUI-specific) data
void *m_gui_dependent;
+
+private:
+ // notify the associated wxSocket about a change in socket state and shut
+ // down the socket if the event is GSOCK_LOST
+ void OnStateChange(GSocketEvent event);
};
// A version of GSocketManager which uses FDs for socket IO