do not require a running event loop, even under MSW, for the sockets to work: if the user code doesn't use events there is no reason for it to run the event loop, especially as it's not needed under the other platforms; instead use the same Select() implementation as under Unix under MSW too and, to avoid duplicating it, put it into the new GSocketBase class
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56923 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -154,6 +154,50 @@ private:
|
||||
static GSocketManager *ms_manager;
|
||||
};
|
||||
|
||||
/*
|
||||
Base class providing functionality common to BSD and Winsock sockets.
|
||||
|
||||
TODO: merge this in wxSocket itself, there is no reason to maintain the
|
||||
separation between wxSocket and GSocket.
|
||||
*/
|
||||
class GSocketBase
|
||||
{
|
||||
public:
|
||||
GSocketEventFlags Select(GSocketEventFlags flags);
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
SOCKET m_fd;
|
||||
#else
|
||||
int m_fd;
|
||||
#endif
|
||||
|
||||
bool m_ok;
|
||||
int m_initialRecvBufferSize;
|
||||
int m_initialSendBufferSize;
|
||||
|
||||
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;
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
struct timeval m_timeout;
|
||||
#else
|
||||
unsigned long m_timeout;
|
||||
#endif
|
||||
|
||||
GSocketEventFlags m_detected;
|
||||
GSocketCallback m_cbacks[GSOCK_MAX_EVENT];
|
||||
char *m_data[GSOCK_MAX_EVENT];
|
||||
};
|
||||
|
||||
#if defined(__WINDOWS__)
|
||||
#include "wx/msw/gsockmsw.h"
|
||||
#else
|
||||
@@ -246,6 +290,50 @@ GSocketError _GAddress_Init_UNIX(GAddress *address);
|
||||
GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path);
|
||||
GSocketError GAddress_UNIX_GetPath(GAddress *address, char *path, size_t sbuf);
|
||||
|
||||
// standard linux headers produce many warnings when used with icc
|
||||
#if defined(__INTELC__) && defined(__LINUX__)
|
||||
inline void wxFD_ZERO(fd_set *fds)
|
||||
{
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:593)
|
||||
FD_ZERO(fds);
|
||||
#pragma warning(pop)
|
||||
}
|
||||
|
||||
inline void wxFD_SET(int fd, fd_set *fds)
|
||||
{
|
||||
#pragma warning(push, 1)
|
||||
#pragma warning(disable:1469)
|
||||
FD_SET(fd, fds);
|
||||
#pragma warning(pop)
|
||||
}
|
||||
|
||||
inline bool wxFD_ISSET(int fd, fd_set *fds)
|
||||
{
|
||||
#pragma warning(push, 1)
|
||||
#pragma warning(disable:1469)
|
||||
return FD_ISSET(fd, fds);
|
||||
#pragma warning(pop)
|
||||
}
|
||||
inline bool wxFD_CLR(int fd, fd_set *fds)
|
||||
{
|
||||
#pragma warning(push, 1)
|
||||
#pragma warning(disable:1469)
|
||||
return FD_CLR(fd, fds);
|
||||
#pragma warning(pop)
|
||||
}
|
||||
#else // !__INTELC__
|
||||
#define wxFD_ZERO(fds) FD_ZERO(fds)
|
||||
#define wxFD_SET(fd, fds) FD_SET(fd, fds)
|
||||
#define wxFD_ISSET(fd, fds) FD_ISSET(fd, fds)
|
||||
#define wxFD_CLR(fd, fds) FD_CLR(fd, fds)
|
||||
#endif // __INTELC__/!__INTELC__
|
||||
|
||||
// this is for Windows where configure doesn't define this
|
||||
#ifndef SOCKOPTLEN_T
|
||||
#define SOCKOPTLEN_T int
|
||||
#endif
|
||||
|
||||
#endif /* wxUSE_SOCKETS */
|
||||
|
||||
#endif /* _WX_GSOCKET_H_ */
|
||||
|
@@ -24,7 +24,7 @@
|
||||
#endif
|
||||
|
||||
/* Definition of GSocket */
|
||||
class GSocket
|
||||
class GSocket : public GSocketBase
|
||||
{
|
||||
public:
|
||||
GSocket();
|
||||
@@ -47,7 +47,6 @@ public:
|
||||
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 millis);
|
||||
GSocketError WXDLLIMPEXP_NET GetError();
|
||||
@@ -73,31 +72,10 @@ protected:
|
||||
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;
|
||||
|
||||
/* TODO: Make these protected */
|
||||
public:
|
||||
SOCKET m_fd;
|
||||
GAddress *m_local;
|
||||
GAddress *m_peer;
|
||||
GSocketError m_error;
|
||||
|
||||
/* Attributes */
|
||||
bool m_non_blocking;
|
||||
bool m_server;
|
||||
bool m_stream;
|
||||
bool m_establishing;
|
||||
bool m_reusable;
|
||||
bool m_broadcast;
|
||||
bool m_dobind;
|
||||
struct timeval m_timeout;
|
||||
|
||||
/* Callbacks */
|
||||
GSocketEventFlags m_detected;
|
||||
GSocketCallback m_cbacks[GSOCK_MAX_EVENT];
|
||||
char *m_data[GSOCK_MAX_EVENT];
|
||||
int m_msgnumber;
|
||||
};
|
||||
|
||||
|
@@ -13,7 +13,7 @@
|
||||
|
||||
class wxGSocketIOHandler;
|
||||
|
||||
class GSocket
|
||||
class GSocket : public GSocketBase
|
||||
{
|
||||
public:
|
||||
GSocket();
|
||||
@@ -34,7 +34,6 @@ public:
|
||||
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();
|
||||
@@ -66,35 +65,14 @@ protected:
|
||||
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;
|
||||
};
|
||||
|
@@ -11,45 +11,9 @@
|
||||
#ifndef _WX_UNIX_PRIVATE_H_
|
||||
#define _WX_UNIX_PRIVATE_H_
|
||||
|
||||
// standard linux headers produce many warnings when used with icc
|
||||
#if defined(__INTELC__) && defined(__LINUX__)
|
||||
inline void wxFD_ZERO(fd_set *fds)
|
||||
{
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:593)
|
||||
FD_ZERO(fds);
|
||||
#pragma warning(pop)
|
||||
}
|
||||
|
||||
inline void wxFD_SET(int fd, fd_set *fds)
|
||||
{
|
||||
#pragma warning(push, 1)
|
||||
#pragma warning(disable:1469)
|
||||
FD_SET(fd, fds);
|
||||
#pragma warning(pop)
|
||||
}
|
||||
|
||||
inline bool wxFD_ISSET(int fd, fd_set *fds)
|
||||
{
|
||||
#pragma warning(push, 1)
|
||||
#pragma warning(disable:1469)
|
||||
return FD_ISSET(fd, fds);
|
||||
#pragma warning(pop)
|
||||
}
|
||||
inline bool wxFD_CLR(int fd, fd_set *fds)
|
||||
{
|
||||
#pragma warning(push, 1)
|
||||
#pragma warning(disable:1469)
|
||||
return FD_CLR(fd, fds);
|
||||
#pragma warning(pop)
|
||||
}
|
||||
#else // !__INTELC__
|
||||
#define wxFD_ZERO(fds) FD_ZERO(fds)
|
||||
#define wxFD_SET(fd, fds) FD_SET(fd, fds)
|
||||
#define wxFD_ISSET(fd, fds) FD_ISSET(fd, fds)
|
||||
#define wxFD_CLR(fd, fds) FD_CLR(fd, fds)
|
||||
#endif // __INTELC__/!__INTELC__
|
||||
|
||||
// this file is currently empty as its original contents was moved to
|
||||
// include/wx/gsocket.h but let's keep it for now in case we need it for
|
||||
// something again in the future
|
||||
|
||||
#endif // _WX_UNIX_PRIVATE_H_
|
||||
|
||||
|
Reference in New Issue
Block a user