#ifndef __GSOCKET_H
#define __GSOCKET_H
+#include "wx/setup.h"
+
+#if wxUSE_SOCKETS
+
+#include <stddef.h>
#include <sys/types.h>
#if !defined(__cplusplus)
-
typedef int bool;
-
#endif
#ifndef TRUE
GSOCK_INVADDR,
GSOCK_INVSOCK,
GSOCK_NOHOST,
- GSOCK_INVPORT
+ GSOCK_INVPORT,
+ GSOCK_WOULDBLOCK,
+ GSOCK_TIMEDOUT,
+ GSOCK_MEMERR
} GSocketError;
typedef enum {
GSOCK_INPUT_FLAG = 1 << GSOCK_INPUT,
GSOCK_OUTPUT_FLAG = 1 << GSOCK_OUTPUT,
GSOCK_CONNECTION_FLAG = 1 << GSOCK_CONNECTION,
- GSOCK_LOST_FLAG = 1 << GSOCK_LOST,
+ GSOCK_LOST_FLAG = 1 << GSOCK_LOST
};
typedef int GSocketEventFlags;
-typedef void (*GSocketFallback)(GSocket *socket, GSocketEvent event,
- char *cdata);
+typedef void (*GSocketCallback)(GSocket *socket, GSocketEvent event,
+ char *cdata);
#ifdef __cplusplus
extern "C" {
#endif
+/* Global initialisers */
+
+/* GSocket_Init() must be called at the beginning */
+bool GSocket_Init();
+/* GSocket_Cleanup() must be called at the ending */
+void GSocket_Cleanup();
+
/* Constructors / Destructors */
GSocket *GSocket_new();
/* Server specific parts */
/*
- GSocket_SetServer() setup the socket as a server. It uses the "Local" field
+ GSocket_SetServer() setups the socket as a server. It uses the "Local" field
of GSocket. "Local" must be set by GSocket_SetLocal() before
GSocket_SetServer() is called. In the other case, it returns GSOCK_INVADDR.
*/
/* Generic IO */
/* Like recv(), send(), ... */
-/*
+/*
NOTE: In case we read from a non-oriented connection, the incoming (outgoing)
- connection address is stored in the "Local" ("Peer") field.
+ connection address is stored in the "Local" ("Peer") field.
*/
int GSocket_Read(GSocket *socket, char *buffer, int size);
int GSocket_Write(GSocket *socket, const char *buffer,
- int size);
+ int size);
bool GSocket_DataAvailable(GSocket *socket);
-/* Flags */
+/* Flags/Parameters */
+
+/*
+ GSocket_SetTimeout() sets the timeout for reading and writing IO call. Time
+ is expressed in milliseconds.
+ */
+void GSocket_SetTimeout(GSocket *socket, unsigned long millisec);
/*
GSocket_SetBlocking() puts the socket in non-blocking mode. This is useful
if we don't want to wait.
*/
-void GSocket_SetBlocking(GSocket *socket, bool block);
+void GSocket_SetNonBlocking(GSocket *socket, bool non_block);
/*
GSocket_GetError() returns the last error occured on the socket stream.
/* Callbacks */
-/*
+/*
Only one fallback is possible for each event (INPUT, OUTPUT, CONNECTION, LOST)
- INPUT: The function is called when there is at least a byte in the
+ INPUT: The function is called when there is at least a byte in the
input buffer
OUTPUT: The function is called when the system is sure the next write call
will not block
CONNECTION: Two cases is possible:
Client socket -> the connection is established
- Server socket -> a client request a connection
+ Server socket -> a client request a connection
LOST: the connection is lost
- SetFallback accepts a combination of these flags so a same callback can
+ SetCallback accepts a combination of these flags so a same callback can
receive different events.
An event is generated only once and its state is reseted when the relative
For example: INPUT -> GSocket_Read()
CONNECTION -> GSocket_Accept()
*/
-void GSocket_SetFallback(GSocket *socket, GSocketEventFlags event,
- GSocketFallback fallback, char *cdata);
+void GSocket_SetCallback(GSocket *socket, GSocketEventFlags event,
+ GSocketCallback fallback, char *cdata);
/*
- UnsetFallback will disables all fallbacks specified by "event".
+ UnsetCallback will disables all fallbacks specified by "event".
NOTE: event may be a combination of flags
*/
-void GSocket_UnsetFallback(GSocket *socket, GSocketEventFlags event);
+void GSocket_UnsetCallback(GSocket *socket, GSocketEventFlags event);
/* GAddress */
void GAddress_SetFamily(GAddress *address, GAddressType type);
GAddressType GAddress_GetFamily(GAddress *address);
-/*
+/*
The use of any of the next functions will set the address family to the adapted
one. For example if you use GAddress_INET_SetHostName, address family will be AF_INET
implicitely
GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname);
GSocketError GAddress_INET_SetHostAddress(GAddress *address,
unsigned long hostaddr);
-GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port);
+GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port,
+ const char *protocol);
GSocketError GAddress_INET_SetPort(GAddress *address, unsigned short port);
GSocketError GAddress_INET_GetHostName(GAddress *address, char *hostname,
#ifdef __cplusplus
};
+#endif /* __cplusplus */
+
+
#endif
+ /* wxUSE_SOCKETS */
#endif
- /* __GSOCKET_H */
+ /* __GSOCKET_H */