00001
00050 #ifndef __LIB3195_SOCKETS_H_INCLUDED__
00051 #define __LIB3195_SOCKETS_H_INCLUDED__ 1
00052
00053 #include "config.h"
00054 #ifdef SROS_WIN32
00055 # include <winsock2.h>
00056 #else
00057 #include <sys/types.h>
00058 #include <sys/time.h>
00059 #include <sys/socket.h>
00060 #include <sys/select.h>
00061 #include <unistd.h>
00062 #include <netinet/in.h>
00063 #include <netdb.h>
00064 #include <errno.h>
00065 #endif
00066
00067 #define sbSockCHECKVALIDOBJECT(x) {assert(x != NULL); assert(x->OID == OIDsbSock);}
00068
00072 #define sbSOCK_NO_CHAR -1
00073
00074 struct sbSockObject
00078 {
00079 srObjID OID;
00080 srRetVal iLastErr;
00081 SR_SOCKET sock;
00082 int bIsInError;
00083 int dwLastError;
00084 char szInBuf[SOCKETMAXINBUFSIZE];
00085 int iCurInBufPos;
00086 int iInBufLen;
00087 fd_set fdset;
00088 # if FEATURE_LISTENER == 1
00089 struct sockaddr_in RemoteHostAddr;
00090 char *pRemoteHostIP;
00091 int iRemHostIPBufLen;
00092 # endif
00093 };
00094 typedef struct sbSockObject sbSockObj;
00095
00096
00097
00098
00099
00100
00101
00103 #define sbSockGetLastError(pThis) pThis->iLastErr
00104
00106 #define sbSockSetLastError(pThis, iRet) pThis->iLastErr = iRet
00107
00109 #define sbSockResetLastError(pThis) pThis->iLastErr = SR_RET_OK
00110
00111
00123 srRetVal sbSockLayerInit(int bInitOSStack);
00134 srRetVal sbSockLayerExit(int bExitOSStack);
00135
00136 sbSockObj* sbSockInit(void);
00137 srRetVal sbSockExit(sbSockObj*);
00138 int sbSockGetLastSockError(sbSockObj*);
00144 srRetVal sbSockConnectoToHost(sbSockObj* pThis, char* pszHost, int iPort);
00145
00152 int sbSockHasReceiveData(sbSockObj* pThis);
00153
00162 int sbSockReceive(sbSockObj* pThis, char * pszBuf, int iLen);
00163
00171 int sbSockSend(sbSockObj* pThis, const char* pszBuf, int iLen);
00172
00181 int sbSockGetRcvChar(sbSockObj *pThis);
00182
00191 int sbSockPeekRcvChar(sbSockObj *pThis);
00192
00196 srRetVal sbSockClosesocket(sbSockObj *pThis);
00197
00198
00203 srRetVal sbSockWaitReceiveData(struct sbSockObject* pThis);
00204
00208 typedef fd_set srSock_fd_set;
00209
00216 #define sbSockFD_ZERO(fdset) FD_ZERO(fdset)
00217
00223 #define sbSockFD_SET(sock, fdset) FD_SET(sock, fdset)
00224
00230 #define sbSockFD_ISSET(sock, fdset) FD_ISSET(sock, fdset)
00231
00232
00242 # ifdef SROS_WIN32
00243 int sbSockSelectMulti(srSock_fd_set *fdsetRD, srSock_fd_set *fdsetWR, int iTimOutSecs, int iTimOutMSecs);
00244 # else
00245 int sbSockSelectMulti(srSock_fd_set *fdsetRD, srSock_fd_set *fdsetWR, int iTimOutSecs, int iTimOutMSecs, int iHighestDesc);
00246 # endif
00247
00251 srRetVal sbSockListen(sbSockObj*pThis);
00252
00272 sbSockObj* sbSockInitListenSock(srRetVal *iRet, char *szBindToAddress, unsigned uBindToPort);
00273
00278 srRetVal sbSockAcceptConnection(sbSockObj* pThis, sbSockObj** pNew);
00279
00283 srRetVal sbSockSetNonblocking(sbSockObj*pThis);
00284
00289 srRetVal sbSockGetRemoteHostIP(sbSockObj *pThis, char **ppszHost);
00290
00300 srRetVal sbSock_gethostname(char **psz);
00301
00321 srRetVal sbSockGetIPusedForSending(sbSockObj* pThis, char**ppsz);
00322
00323
00324 #ifdef SROS_WIN32
00325 # define SBSOCK_EWOULDBLOCK WSAEWOULDBLOCK
00326 #else
00327 # define SBSOCK_EWOULDBLOCK EWOULDBLOCK
00328 # define SOCKET_ERROR -1
00329 #endif
00330
00331 #endif