librnr  1.14.5
RoadNarrows Robotics Common Library 1
sockset.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////////
2 /*! \file
3  *
4  * \brief Socket Sets services definitions.
5  *
6  * \note
7  * These socket functions were inspired by the <em>camserv</em> socket.c
8  * functions written by Jon Travis (jtravis@p00p.org)
9  *
10  * \pkgsynopsis
11  * RoadNarrows Robotics Common Library 1
12  *
13  * \pkgcomponent{Library}
14  * librnr
15  *
16  * \pkgfile{rnr/sockset.h}
17  *
18  * \author Robin Knight (robin.knight@roadnarrows.com)
19  *
20  * \pkgcopyright{2005-2018,RoadNarrows LLC.,http://www.roadnarrows.com}
21  *
22  * \license{MIT}
23  *
24  * \EulaBegin
25  * See the README and EULA files for any copyright and licensing information.
26  * \EulaEnd
27  */
28 ////////////////////////////////////////////////////////////////////////////////
29 
30 #ifndef _RNR_SOCKSET_H
31 #define _RNR_SOCKSET_H
32 
33 #include <sys/time.h>
34 #include <sys/select.h>
35 
36 #include "rnr/rnrconfig.h"
37 #include "rnr/log.h"
38 #include "rnr/sock.h"
39 
41 
42 
43 /*!
44  * The Socket Set Structure
45  */
46 typedef struct sockset_t SockSet_T;
47 
48 /*!
49  * Socket Set Iterator Structor
50  */
51 typedef struct
52 {
53  SockSet_T *m_pSockSet; ///< socket set
54  int m_eSet; ///< which socket set to iterate over
55  int m_eIO; ///< which read/write subset to iterate over
56  int m_sdCur; ///< current iterator position
57  fd_set m_sdSet; ///< set to iterate over
59 
60 //
61 // Socket Set Enumeration
62 //
63 #define SOCK_SET_ONHOLD 0 ///< on-hold socket descriptor set
64 #define SOCK_SET_ACTIVE 1 ///< active socket descriptor set
65 #define SOCK_SET_SELECTED 2 ///< post select() selected socket desc. set
66 #define SOCK_SET_NUMOF 3 ///< number of managed socket descriptor sets
67 
68 /*!
69  * \brief Check socket set enum.
70  * \param set Socket descriptor set enum.
71  */
72 #define SOCK_SET_CHK_SET(set, ...) \
73  CHKEXPR_INT(set, ((set) >= 0) && ((set) < SOCK_SET_NUMOF), __VA_ARGS__)
74 
75 
76 //------------------------------------------------------------------------------
77 // Prototypes
78 //------------------------------------------------------------------------------
79 
80 extern SockSet_T *SockSetNew();
81 
82 extern void SockSetDelete(SockSet_T *pSockSet);
83 
84 extern int SockSetAdd(SockSet_T *pSockSet,
85  Socket_T *pSocket,
86  bool_t bActivateRead,
87  bool_t bActivateWrite);
88 
89 extern int SockSetRemove(SockSet_T *pSockSet, Socket_T *pSocket);
90 
91 extern int SockSetActivate(SockSet_T *pSockSet,
92  Socket_T *pSocket,
93  bool_t bActivateRead,
94  bool_t bActivateWrite);
95 
96 extern int SockSetPutOnHold(SockSet_T *pSockSet,
97  Socket_T *pSocket,
98  bool_t bHoldRead,
99  bool_t bHoldWrite);
100 
101 extern int SockSetSelect(SockSet_T *pSockSet, struct timeval *pTimeOut);
102 
103 extern Socket_T *SockSetIterFirst(SockSet_T *pSockSet,
104  int eSet,
105  int eIO,
106  SockSetIter_T *pIter);
107 
108 extern Socket_T *SockSetIterNext(SockSetIter_T *pIter);
109 
111 
112 
113 #endif // _RNR_SOCKSET_H
int SockSetActivate(SockSet_T *pSockSet, Socket_T *pSocket, bool_t bActivateRead, bool_t bActivateWrite)
Activate Socket read/write operations in SockSet.
Definition: sockset.c:377
int SockSetAdd(SockSet_T *pSockSet, Socket_T *pSocket, bool_t bActivateRead, bool_t bActivateWrite)
Add a Socket to a SockSet.
Definition: sockset.c:272
void SockSetDelete(SockSet_T *pSockSet)
Delete an allocated SockSet.
Definition: sockset.c:250
SockSet_T * SockSetNew()
Allocate a new SockSet.
Definition: sockset.c:229
int m_sdCur
current iterator position
Definition: sockset.h:56
Socket_T * SockSetIterFirst(SockSet_T *pSockSet, int eSet, int eIO, SockSetIter_T *pIter)
Start iteration of Sockets in the given set in SockSet.
Definition: sockset.c:548
Socket Set Structure.
Definition: sockset.c:149
Socket_T * SockSetIterNext(SockSetIter_T *pIter)
Next Socket in iteration over the initialized socket set of SockSet.
Definition: sockset.c:587
int SockSetSelect(SockSet_T *pSockSet, struct timeval *pTimeOut)
Perform select() on SockSet&#39;s Active sets.
Definition: sockset.c:472
SockSet_T * m_pSockSet
socket set
Definition: sockset.h:53
#define C_DECLS_BEGIN
C declaration block begin in C.
Definition: rnrconfig.h:71
Socket services declarations.
int m_eIO
which read/write subset to iterate over
Definition: sockset.h:55
int bool_t
"boolean" T/F
Definition: rnrconfig.h:187
fd_set m_sdSet
set to iterate over
Definition: sockset.h:57
RoadNarrows Robotics common configuration file.
#define C_DECLS_END
C declaration block end in C.
Definition: rnrconfig.h:72
int SockSetRemove(SockSet_T *pSockSet, Socket_T *pSocket)
Remove Socket from SockSet.
Definition: sockset.c:336
Definition: sock.c:136
int SockSetPutOnHold(SockSet_T *pSockSet, Socket_T *pSocket, bool_t bHoldRead, bool_t bHoldWrite)
Put Socket read/write operations in SockSet on hold.
Definition: sockset.c:429
Logger declarations.
int m_eSet
which socket set to iterate over
Definition: sockset.h:54