gwenhywfar
4.3.1
|
00001 /*************************************************************************** 00002 $RCSfile$ 00003 ------------------- 00004 cvs : $Id$ 00005 begin : Tue Oct 02 2002 00006 copyright : (C) 2002 by Martin Preuss 00007 email : martin@libchipcard.de 00008 00009 *************************************************************************** 00010 * * 00011 * This library is free software; you can redistribute it and/or * 00012 * modify it under the terms of the GNU Lesser General Public * 00013 * License as published by the Free Software Foundation; either * 00014 * version 2.1 of the License, or (at your option) any later version. * 00015 * * 00016 * This library is distributed in the hope that it will be useful, * 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00019 * Lesser General Public License for more details. * 00020 * * 00021 * You should have received a copy of the GNU Lesser General Public * 00022 * License along with this library; if not, write to the Free Software * 00023 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * 00024 * MA 02111-1307 USA * 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(void); 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 /*end of group socketset */ 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 /* end of group socket */ 00391 /* end of group socketsandsets */ 00394 #ifdef __cplusplus 00395 } 00396 #endif 00397 00398 #endif /* GWEN_SOCKET_H */ 00399 00400 00401