-/////////////////////////////////////////////////////////////////////////////
-// Some patch ///// BEGIN
-/////////////////////////////////////////////////////////////////////////////
-#ifdef __WINDOWS__
-#define close closesocket
-#define ioctl ioctlsocket
-#ifdef errno
-#undef errno
-#endif
-#define errno WSAGetLastError()
-#ifdef EWOULDBLOCK
-#undef EWOULDBLOCK
-#endif
-#define EWOULDBLOCK WSAEWOULDBLOCK
-#define ETIMEDOUT WSAETIMEDOUT
-#undef EINTR
-#define EINTR WSAEINTR
-#endif
-
-#ifndef __WINDOWS__
-#define INVALID_SOCKET -1
-#endif
-
-#ifdef __WXMOTIF__
-#define wxAPP_CONTEXT ((XtAppContext)wxTheApp->GetAppContext())
-#endif
-
-#ifdef __WINDOWS__
-// This is an MS TCP/IP routine and is not needed here. Some WinSock
-// implementations (such as PC-NFS) will require you to include this
-// or a similar routine (see appendix in WinSock doc or help file).
-
-#if defined( NEED_WSAFDIsSet ) || defined( _MSC_VER )
-int PASCAL FAR __WSAFDIsSet(SOCKET fd, fd_set FAR *set)
-{
- int i = set->fd_count;
-
- while (i--)
- {
- if (set->fd_array[i] == fd)
- return 1;
- }
-
- return 0;
-}
-#endif
-#endif
-
-#if defined(__WINDOWS__)
-#define PROCESS_EVENTS() wxYield()
-#elif defined(__WXXT__) || defined(__WXMOTIF__)
-#define PROCESS_EVENTS() XtAppProcessEvent(wxAPP_CONTEXT, XtIMAll)
-#elif defined(__WXGTK__)
-#define PROCESS_EVENTS() wxYield()
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// Some patch ///// END
-/////////////////////////////////////////////////////////////////////////////
-
-// --------------------------------------------------------------
-// Module
-// --------------------------------------------------------------
-class wxSocketModule: public wxModule
-{
- DECLARE_DYNAMIC_CLASS(wxSocketModule)
-public:
- wxSocketModule() {}
- bool OnInit();
- void OnExit();
-};
+// --------------------------------------------------------------------------
+// macros and constants
+// --------------------------------------------------------------------------
+
+// discard buffer
+#define MAX_DISCARD_SIZE (10 * 1024)
+
+// what to do within waits: in wxBase we don't do anything as we don't have
+// the event loop anyhow (for now). In GUI apps we have 2 cases: from the main
+// thread itself we have to call wxYield() to let the events (including the
+// GUI events and the low-level (not wxWindows) events from GSocket) be
+// processed. From another thread it is enough to just call wxThread::Yield()
+// which will give away the rest of our time slice: the explanation is that
+// the events will be processed by the main thread anyhow, without calling
+// wxYield(), but we don't want to eat the CPU time uselessly while sitting
+// in the loop waiting for the data
+#if wxUSE_GUI
+ #if wxUSE_THREADS
+ #define PROCESS_EVENTS() \
+ { \
+ if ( wxThread::IsMain() ) \
+ wxYield(); \
+ else \
+ wxThread::Yield(); \
+ }
+ #else // !wxUSE_THREADS
+ #define PROCESS_EVENTS() wxYield()
+ #endif // wxUSE_THREADS/!wxUSE_THREADS
+#else // !wxUSE_GUI
+ #define PROCESS_EVENTS()
+#endif // wxUSE_GUI/!wxUSE_GUI
+
+// --------------------------------------------------------------------------
+// wxWin macros
+// --------------------------------------------------------------------------