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
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043
00044
00055 #define GWEN_SOCKET_ERROR_TYPE "Socket"
00056 #define GWEN_SOCKET_ERROR_BAD_SOCKETTYPE (-1)
00057 #define GWEN_SOCKET_ERROR_NOT_OPEN (-2)
00058 #define GWEN_SOCKET_ERROR_TIMEOUT (-3)
00059 #define GWEN_SOCKET_ERROR_IN_PROGRESS (-4)
00060 #define GWEN_SOCKET_ERROR_STARTUP (-5)
00061 #define GWEN_SOCKET_ERROR_INTERRUPTED (-6)
00062 #define GWEN_SOCKET_ERROR_UNSUPPORTED (-7)
00063 #define GWEN_SOCKET_ERROR_ABORTED (-8)
00064 #define GWEN_SOCKET_ERROR_BROKEN_PIPE (-9)
00065
00071 typedef enum {
00072 GWEN_SocketTypeTCP=1,
00073 GWEN_SocketTypeUDP,
00074 GWEN_SocketTypeRAW,
00075 GWEN_SocketTypeUnix,
00076 GWEN_SocketTypeFile
00077 } GWEN_SOCKETTYPE;
00078
00079
00080 typedef struct GWEN_SOCKETSTRUCT GWEN_SOCKET;
00081
00082 typedef struct GWEN_SOCKETSETSTRUCT GWEN_SOCKETSET;
00083
00084
00102 GWENHYWFAR_API GWEN_SOCKETSET *GWEN_SocketSet_new();
00103 GWENHYWFAR_API void GWEN_SocketSet_free(GWEN_SOCKETSET *ssp);
00104 GWENHYWFAR_API GWEN_ERRORCODE GWEN_SocketSet_Clear(GWEN_SOCKETSET *ssp);
00114 GWENHYWFAR_API
00115 GWEN_ERRORCODE GWEN_SocketSet_AddSocket(GWEN_SOCKETSET *ssp,
00116 const GWEN_SOCKET *sp);
00117 GWENHYWFAR_API
00118 GWEN_ERRORCODE GWEN_SocketSet_RemoveSocket(GWEN_SOCKETSET *ssp,
00119 const GWEN_SOCKET *sp);
00120 GWENHYWFAR_API int GWEN_SocketSet_HasSocket(GWEN_SOCKETSET *ssp,
00121 const GWEN_SOCKET *sp);
00122 GWENHYWFAR_API int GWEN_SocketSet_GetSocketCount(GWEN_SOCKETSET *ssp);
00123
00125
00140
00144 GWENHYWFAR_API GWEN_SOCKET *GWEN_Socket_new(GWEN_SOCKETTYPE socketType);
00145
00146 GWENHYWFAR_API GWEN_SOCKET *GWEN_Socket_fromFile(int fd);
00147
00151 GWENHYWFAR_API void GWEN_Socket_free(GWEN_SOCKET *sp);
00152
00157 GWENHYWFAR_API GWEN_ERRORCODE GWEN_Socket_Open(GWEN_SOCKET *sp);
00158
00162 GWENHYWFAR_API GWEN_ERRORCODE GWEN_Socket_Close(GWEN_SOCKET *sp);
00171 GWENHYWFAR_API
00172 GWEN_ERRORCODE GWEN_Socket_Connect(GWEN_SOCKET *sp,
00173 const GWEN_INETADDRESS *addr);
00174
00185 GWENHYWFAR_API
00186 GWEN_ERRORCODE GWEN_Socket_Connect_Wait(GWEN_SOCKET *sp,
00187 const GWEN_INETADDRESS *addr,
00188 int timeout);
00189
00190 GWENHYWFAR_API
00191 GWEN_ERRORCODE GWEN_Socket_Bind(GWEN_SOCKET *sp,
00192 const GWEN_INETADDRESS *addr);
00193 GWENHYWFAR_API
00194 GWEN_ERRORCODE GWEN_Socket_Listen(GWEN_SOCKET *sp, int backlog);
00195
00210 GWENHYWFAR_API
00211 GWEN_ERRORCODE GWEN_Socket_Accept(GWEN_SOCKET *sp,
00212 GWEN_INETADDRESS **addr,
00213 GWEN_SOCKET **newsock);
00214
00215 GWENHYWFAR_API
00216 GWEN_ERRORCODE GWEN_Socket_Accept_Wait(GWEN_SOCKET *sp,
00217 GWEN_INETADDRESS **addr,
00218 GWEN_SOCKET **newsock,
00219 int timeout);
00229
00234 GWENHYWFAR_API GWEN_SOCKETTYPE GWEN_Socket_GetSocketType(GWEN_SOCKET *sp);
00235
00236
00244 GWENHYWFAR_API
00245 GWEN_ERRORCODE GWEN_Socket_GetPeerAddr(GWEN_SOCKET *sp,
00246 GWEN_INETADDRESS **addr);
00247
00256 GWENHYWFAR_API
00257 GWEN_ERRORCODE GWEN_Socket_Select(GWEN_SOCKETSET *rs,
00258 GWEN_SOCKETSET *ws,
00259 GWEN_SOCKETSET *xs,
00260 int timeout);
00261
00267 GWENHYWFAR_API
00268 GWEN_ERRORCODE GWEN_Socket_WaitForRead(GWEN_SOCKET *sp, int timeout);
00269
00275 GWENHYWFAR_API
00276 GWEN_ERRORCODE GWEN_Socket_WaitForWrite(GWEN_SOCKET *sp, int timeout);
00286
00295 GWENHYWFAR_API GWEN_ERRORCODE GWEN_Socket_Read(GWEN_SOCKET *sp,
00296 char *buffer,
00297 int *bsize);
00298
00299 GWENHYWFAR_API GWEN_ERRORCODE GWEN_Socket_Read_Wait(GWEN_SOCKET *sp,
00300 char *buffer,
00301 int *bsize,
00302 int timeout,
00303 int force);
00304
00313 GWENHYWFAR_API GWEN_ERRORCODE GWEN_Socket_Write(GWEN_SOCKET *sp,
00314 const char *buffer,
00315 int *bsize);
00316
00317 GWENHYWFAR_API GWEN_ERRORCODE GWEN_Socket_Write_Wait(GWEN_SOCKET *sp,
00318 const char *buffer,
00319 int *bsize,
00320 int timeout,
00321 int force);
00322
00335 GWENHYWFAR_API
00336 GWEN_ERRORCODE GWEN_Socket_ReadFrom(GWEN_SOCKET *sp,
00337 GWEN_INETADDRESS **addr,
00338 char *buffer,
00339 int *bsize);
00349 GWENHYWFAR_API
00350 GWEN_ERRORCODE GWEN_Socket_WriteTo(GWEN_SOCKET *sp,
00351 const GWEN_INETADDRESS *addr,
00352 const char *buffer,
00353 int *bsize);
00367 GWENHYWFAR_API GWEN_ERRORCODE GWEN_Socket_SetBlocking(GWEN_SOCKET *sp,
00368 int fl);
00377 GWENHYWFAR_API GWEN_ERRORCODE GWEN_Socket_SetBroadcast(GWEN_SOCKET *sp,
00378 int fl);
00379
00388 GWENHYWFAR_API GWEN_ERRORCODE GWEN_Socket_GetSocketError(GWEN_SOCKET *sp);
00389
00398 GWENHYWFAR_API
00399 GWEN_ERRORCODE GWEN_Socket_SetReuseAddress(GWEN_SOCKET *sp, int fl);
00402
00405
00408 #ifdef __cplusplus
00409 }
00410 #endif
00411
00412 #endif
00413
00414
00415