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 MOD_SOCKET_H
00034
#define MOD_SOCKET_H
00035
00036
#include "chameleon/error.h"
00037
#include "chameleon/inetaddr.h"
00038
#include <sys/types.h>
00039
#include <sys/socket.h>
00040
#include <netinet/in.h>
00041
#ifdef HAVE_ARPA_INET_H
00042
# include <arpa/inet.h>
00043
#endif
00044
00045
00046
#ifdef __cplusplus
00047
extern "C" {
00048
#endif
00049
00050
00058 #define SOCKET_ERROR_TYPE "Socket"
00059 #define SOCKET_ERROR_BAD_SOCKETTYPE (-1)
00060 #define SOCKET_ERROR_NOT_OPEN (-2)
00061 #define SOCKET_ERROR_TIMEOUT (-3)
00062 #define SOCKET_ERROR_IN_PROGRESS (-4)
00063 #define SOCKET_ERROR_STARTUP (-5)
00064 #define SOCKET_ERROR_INTERRUPTED (-6)
00065 #define SOCKET_ERROR_UNSUPPORTED (-7)
00066
00067
00071 CHIPCARD_API typedef enum {
00072
SocketTypeTCP=1,
00073
SocketTypeUDP,
00074
SocketTypeRAW,
00075
SocketTypeUnix
00076 }
SOCKETTYPE;
00077
00078
00079 CHIPCARD_API struct SOCKETSTRUCT {
00080
int socket;
00081
int type;
00082 };
00083
00084 CHIPCARD_API typedef struct SOCKETSTRUCT*
SOCKETPTR;
00085
00086 CHIPCARD_API struct SOCKETSETSTRUCT {
00087 fd_set
set;
00088
int highest;
00089 };
00090
00091 CHIPCARD_API typedef struct SOCKETSETSTRUCT SOCKETSET;
00092 CHIPCARD_API typedef SOCKETSET*
SOCKETSETPTR;
00093
00094
00098
CHIPCARD_API ERRORCODE Socket_ModuleInit();
00099
00103
CHIPCARD_API ERRORCODE Socket_ModuleFini();
00104
00122
CHIPCARD_API ERRORCODE SocketSet_Create(SOCKETSETPTR ssp);
00123
CHIPCARD_API ERRORCODE SocketSet_Destroy(SOCKETSETPTR ssp);
00124
CHIPCARD_API ERRORCODE SocketSet_Clear(SOCKETSETPTR ssp);
00126
00134
CHIPCARD_API ERRORCODE SocketSet_AddSocket(SOCKETSETPTR ssp,
00135
const struct SOCKETSTRUCT *sp);
00136
CHIPCARD_API ERRORCODE SocketSet_RemoveSocket(SOCKETSETPTR ssp,
00137
const struct SOCKETSTRUCT *sp);
00138
CHIPCARD_API int SocketSet_HasSocket(SOCKETSETPTR ssp,
00139
const struct SOCKETSTRUCT *sp);
00141
00143
00144
00156
00160
CHIPCARD_API SOCKETPTR Socket_new();
00161
00165
CHIPCARD_API void Socket_free(SOCKETPTR sp);
00166
00171
CHIPCARD_API ERRORCODE Socket_Open(SOCKETPTR sp, SOCKETTYPE socketType);
00172
00176
CHIPCARD_API ERRORCODE Socket_Close(SOCKETPTR sp);
00178
00185
CHIPCARD_API ERRORCODE Socket_Connect(SOCKETPTR sp,
const INETADDRESS *addr);
00186
CHIPCARD_API ERRORCODE Socket_Bind(SOCKETPTR sp,
const INETADDRESS *addr);
00187
CHIPCARD_API ERRORCODE Socket_Listen(SOCKETPTR sp,
int backlog);
00188
CHIPCARD_API ERRORCODE Socket_Accept(SOCKETPTR sp, INETADDRESSPTR addr, SOCKETPTR newsock);
00190
00198
00199
CHIPCARD_API SOCKETTYPE Socket_GetSocketType(SOCKETPTR sp);
00200
00201
CHIPCARD_API ERRORCODE Socket_GetPeerAddr(SOCKETPTR sp, INETADDRESSPTR addr);
00202
00211
CHIPCARD_API ERRORCODE Socket_Select(SOCKETSETPTR rs,
00212 SOCKETSETPTR ws,
00213 SOCKETSETPTR xs,
00214
int timeout);
00215
00220
CHIPCARD_API ERRORCODE Socket_WaitForRead(SOCKETPTR sp,
int timeout);
00221
00226
CHIPCARD_API ERRORCODE Socket_WaitForWrite(SOCKETPTR sp,
int timeout);
00228
00236
00244
CHIPCARD_API ERRORCODE Socket_Read(SOCKETPTR sp,
00245
char *buffer,
00246
int *bsize);
00247
00255
CHIPCARD_API ERRORCODE Socket_Write(SOCKETPTR sp,
00256
const char *buffer,
00257
int *bsize);
00258
00268
CHIPCARD_API ERRORCODE Socket_ReadFrom(SOCKETPTR sp,
00269 INETADDRESSPTR addr,
00270
char *buffer,
00271
int *bsize);
00280
CHIPCARD_API ERRORCODE Socket_WriteTo(SOCKETPTR sp,
00281
const INETADDRESS *addr,
00282
const char *buffer,
00283
int *bsize);
00285
00292
CHIPCARD_API ERRORCODE Socket_SetBlocking(SOCKETPTR sp,
00293
int fl);
00294
CHIPCARD_API ERRORCODE Socket_SetBroadcast(SOCKETPTR sp,
00295
int fl);
00296
CHIPCARD_API ERRORCODE Socket_GetSocketError(SOCKETPTR sp);
00297
00298
CHIPCARD_API ERRORCODE Socket_SetReuseAddress(SOCKETPTR sp,
int fl);
00300
00301
00303
00304
00306
00307
#ifdef __cplusplus
00308
}
00309
#endif
00310
00311
#endif // MOD_SOCKET_H
00312
00313
00314