gwenhywfar  4.3.1
inetsocket.h
Go to the documentation of this file.
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