#ifndef __GSOCKET_H
#define __GSOCKET_H
+/* DFE: Define this and compile gsocket.cpp instead of gsocket.c and
+ compile existing GUI gsock*.c as C++ to try out the new GSocket. */
+/* #define wxUSE_GSOCKET_CPLUSPLUS 1 */
+#undef wxUSE_GSOCKET_CPLUSPLUS
+#if !defined(__cplusplus) && defined(wxUSE_GSOCKET_CPLUSPLUS)
+#error "You need to compile this file (probably a GUI gsock peice) as C++"
+#endif
+
#ifndef __GSOCKET_STANDALONE__
#include "wx/setup.h"
#include "wx/platform.h"
-#include "wx/dlimpexp.h" // for WXDLLIMPEXP_NET
+#include "wx/dlimpexp.h" /* for WXDLLIMPEXP_NET */
#endif
#include <stdlib.h>
#endif
+#ifdef wxUSE_GSOCKET_CPLUSPLUS
+typedef class GSocketBSD GSocket;
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
+#ifndef wxUSE_GSOCKET_CPLUSPLUS
typedef struct _GSocket GSocket;
+#endif
typedef struct _GAddress GAddress;
typedef enum {
GSOCK_INVPORT,
GSOCK_WOULDBLOCK,
GSOCK_TIMEDOUT,
- GSOCK_MEMERR
+ GSOCK_MEMERR,
+ GSOCK_OPTERR,
} GSocketError;
/* See below for an explanation on how events work.
void GSocket_destroy(GSocket *socket);
+#ifndef wxUSE_GSOCKET_CPLUSPLUS
/* GSocket_Shutdown:
* Disallow further read/write operations on this socket, close
*/
GSocketError GSocket_Connect(GSocket *socket, GSocketStream stream);
+/* GSocket_SetReusable:
+* Simply sets the m_resuable flag on the socket. GSocket_SetServer will
+* make the appropriate setsockopt() call.
+* Implemented as a GSocket function because clients (ie, wxSocketServer)
+* don't have access to the GSocket struct information.
+* Returns TRUE if the flag was set correctly, FALSE if an error occured
+* (ie, if the parameter was NULL)
+*/
+int GSocket_SetReusable(GSocket *socket);
/* Datagram sockets */
*/
GSocketEventFlags GSocket_Select(GSocket *socket, GSocketEventFlags flags);
+GSocketError GSocket_GetSockOpt(GSocket *socket, int level, int optname,
+ void *optval, int *optlen);
+
+GSocketError GSocket_SetSockOpt(GSocket *socket, int level, int optname,
+ const void *optval, int optlen);
/* Attributes */
*/
void GSocket_SetTimeout(GSocket *socket, unsigned long millisec);
+#endif /* ndef wxUSE_GSOCKET_CPLUSPLUS */
+
/* GSocket_GetError:
* Returns the last error occured for this socket. Note that successful
* operations do not clear this back to GSOCK_NOERROR, so use it only
*/
GSocketError WXDLLIMPEXP_NET GSocket_GetError(GSocket *socket);
+#ifndef wxUSE_GSOCKET_CPLUSPLUS
/* Callbacks */
*/
void GSocket_UnsetCallback(GSocket *socket, GSocketEventFlags flags);
+#endif /* ndef wxUSE_GSOCKET_CPLUSPLUS */
+
/* GAddress */
}
#endif /* __cplusplus */
+#ifdef wxUSE_GSOCKET_CPLUSPLUS
+#include "wx/unix/gsockunx.h"
+#endif
#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */