Main Page | Compound List | File List | Compound Members | File Members | Related Pages

sockets.h

Go to the documentation of this file.
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 /* The following three macros could also be inline code.
00098  * For now, I have kept them to be macros to make 
00099  * facilitate porting.
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

Generated on Fri Sep 12 11:20:13 2003 for liblogging by doxygen 1.3.2