00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00033 #ifndef GWEN_SOCKET_H
00034 #define GWEN_SOCKET_H
00035
00036 #include <gwenhywfar/gwenhywfarapi.h>
00037 #include <gwenhywfar/error.h>
00038 #include <gwenhywfar/inetaddr.h>
00039 #include <gwenhywfar/list1.h>
00040 #include <gwenhywfar/list2.h>
00041
00042
00043 typedef struct GWEN_SOCKET GWEN_SOCKET;
00044 typedef struct GWEN_SOCKETSETSTRUCT GWEN_SOCKETSET;
00045
00046 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_SOCKET, GWEN_Socket, GWENHYWFAR_API)
00047 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_SOCKET, GWEN_Socket, GWENHYWFAR_API)
00048
00049
00050 #ifdef __cplusplus
00051 extern "C" {
00052 #endif
00053
00054
00065 #define GWEN_SOCKET_ERROR_TYPE "Socket"
00066 #define GWEN_SOCKET_ERROR_BAD_SOCKETTYPE (-1)
00067 #define GWEN_SOCKET_ERROR_NOT_OPEN (-2)
00068 #define GWEN_SOCKET_ERROR_TIMEOUT (-3)
00069 #define GWEN_SOCKET_ERROR_IN_PROGRESS (-4)
00070 #define GWEN_SOCKET_ERROR_STARTUP (-5)
00071 #define GWEN_SOCKET_ERROR_INTERRUPTED (-6)
00072 #define GWEN_SOCKET_ERROR_UNSUPPORTED (-7)
00073 #define GWEN_SOCKET_ERROR_ABORTED (-8)
00074 #define GWEN_SOCKET_ERROR_BROKEN_PIPE (-9)
00075
00081 typedef enum {
00082 GWEN_SocketTypeTCP=1,
00083 GWEN_SocketTypeUDP,
00084 GWEN_SocketTypeRAW,
00085 GWEN_SocketTypeUnix,
00086 GWEN_SocketTypeFile
00087 } GWEN_SOCKETTYPE;
00088
00089
00090
00108 GWENHYWFAR_API GWEN_SOCKETSET *GWEN_SocketSet_new();
00109 GWENHYWFAR_API void GWEN_SocketSet_free(GWEN_SOCKETSET *ssp);
00110 GWENHYWFAR_API int GWEN_SocketSet_Clear(GWEN_SOCKETSET *ssp);
00120 GWENHYWFAR_API
00121 int GWEN_SocketSet_AddSocket(GWEN_SOCKETSET *ssp,
00122 const GWEN_SOCKET *sp);
00123 GWENHYWFAR_API
00124 int GWEN_SocketSet_RemoveSocket(GWEN_SOCKETSET *ssp,
00125 const GWEN_SOCKET *sp);
00126 GWENHYWFAR_API int GWEN_SocketSet_HasSocket(GWEN_SOCKETSET *ssp,
00127 const GWEN_SOCKET *sp);
00128 GWENHYWFAR_API int GWEN_SocketSet_GetSocketCount(GWEN_SOCKETSET *ssp);
00129
00131
00146
00150 GWENHYWFAR_API GWEN_SOCKET *GWEN_Socket_new(GWEN_SOCKETTYPE socketType);
00151
00152 GWENHYWFAR_API GWEN_SOCKET *GWEN_Socket_fromFile(int fd);
00153
00157 GWENHYWFAR_API void GWEN_Socket_free(GWEN_SOCKET *sp);
00158
00163 GWENHYWFAR_API int GWEN_Socket_Open(GWEN_SOCKET *sp);
00164
00168 GWENHYWFAR_API int GWEN_Socket_Close(GWEN_SOCKET *sp);
00177 GWENHYWFAR_API
00178 int GWEN_Socket_Connect(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr);
00179
00180 GWENHYWFAR_API
00181 int GWEN_Socket_Bind(GWEN_SOCKET *sp, const GWEN_INETADDRESS *addr);
00182
00183 GWENHYWFAR_API int GWEN_Socket_Listen(GWEN_SOCKET *sp, int backlog);
00184
00199 GWENHYWFAR_API
00200 int GWEN_Socket_Accept(GWEN_SOCKET *sp,
00201 GWEN_INETADDRESS **addr,
00202 GWEN_SOCKET **newsock);
00203
00213
00218 GWENHYWFAR_API GWEN_SOCKETTYPE GWEN_Socket_GetSocketType(GWEN_SOCKET *sp);
00219
00220
00228 GWENHYWFAR_API
00229 int GWEN_Socket_GetPeerAddr(GWEN_SOCKET *sp,
00230 GWEN_INETADDRESS **addr);
00231
00240 GWENHYWFAR_API
00241 int GWEN_Socket_Select(GWEN_SOCKETSET *rs,
00242 GWEN_SOCKETSET *ws,
00243 GWEN_SOCKETSET *xs,
00244 int timeout);
00245
00251 GWENHYWFAR_API
00252 int GWEN_Socket_WaitForRead(GWEN_SOCKET *sp, int timeout);
00253
00259 GWENHYWFAR_API
00260 int GWEN_Socket_WaitForWrite(GWEN_SOCKET *sp, int timeout);
00270
00281 GWENHYWFAR_API int GWEN_Socket_Read(GWEN_SOCKET *sp,
00282 char *buffer,
00283 int *bsize);
00284
00293 GWENHYWFAR_API int GWEN_Socket_Write(GWEN_SOCKET *sp,
00294 const char *buffer,
00295 int *bsize);
00296
00309 GWENHYWFAR_API
00310 int GWEN_Socket_ReadFrom(GWEN_SOCKET *sp,
00311 GWEN_INETADDRESS **addr,
00312 char *buffer,
00313 int *bsize);
00323 GWENHYWFAR_API
00324 int GWEN_Socket_WriteTo(GWEN_SOCKET *sp,
00325 const GWEN_INETADDRESS *addr,
00326 const char *buffer,
00327 int *bsize);
00341 GWENHYWFAR_API int GWEN_Socket_SetBlocking(GWEN_SOCKET *sp, int fl);
00350 GWENHYWFAR_API int GWEN_Socket_SetBroadcast(GWEN_SOCKET *sp, int fl);
00351
00360 GWENHYWFAR_API int GWEN_Socket_GetSocketError(GWEN_SOCKET *sp);
00361
00370 GWENHYWFAR_API
00371 int GWEN_Socket_SetReuseAddress(GWEN_SOCKET *sp, int fl);
00385 GWENHYWFAR_API
00386 int GWEN_Socket_GetSocketInt(const GWEN_SOCKET *sp);
00387
00388
00391
00394 #ifdef __cplusplus
00395 }
00396 #endif
00397
00398 #endif
00399
00400
00401