net-snmp 5.7
|
00001 00008 #ifndef LARGE_FD_SET_H 00009 #define LARGE_FD_SET_H 00010 00011 00012 #include <net-snmp/net-snmp-config.h> 00013 #include <net-snmp/types.h> 00014 00015 #ifdef HAVE_SYS_SELECT_H 00016 #include <sys/select.h> 00017 #endif 00018 00019 #if defined(HAVE_WINSOCK_H) && ! defined(_WINSOCKAPI_) && ! defined(_WINSOCK_H) 00020 #error <winsock.h> or <winsock2.h> must have been included before this file. 00021 #endif 00022 00023 00024 #ifdef __cplusplus 00025 extern "C" { 00026 #endif 00027 00028 00029 00034 #define NETSNMP_LARGE_FD_SET(fd, fdset) \ 00035 netsnmp_large_fd_setfd(fd, fdset) 00036 00042 #define NETSNMP_LARGE_FD_CLR(fd, fdset) \ 00043 netsnmp_large_fd_clr(fd, fdset) 00044 00049 #define NETSNMP_LARGE_FD_ISSET(fd, fdset) \ 00050 netsnmp_large_fd_is_set(fd, fdset) 00051 00052 #if ! defined(cygwin) && defined(HAVE_WINSOCK_H) 00053 00055 #define NETSNMP_FD_SET_BYTES(setsize) (sizeof(fd_set) + sizeof(SOCKET) * (setsize - FD_SETSIZE)) 00056 00058 #define NETSNMP_LARGE_FD_ZERO(fdset) \ 00059 do { (fdset)->lfs_setptr->fd_count = 0; } while(0) 00060 00061 00062 NETSNMP_IMPORT 00063 void netsnmp_large_fd_setfd( SOCKET fd, netsnmp_large_fd_set *fdset); 00064 NETSNMP_IMPORT 00065 void netsnmp_large_fd_clr( SOCKET fd, netsnmp_large_fd_set *fdset); 00066 NETSNMP_IMPORT 00067 int netsnmp_large_fd_is_set(SOCKET fd, netsnmp_large_fd_set *fdset); 00068 00069 #else 00070 00077 #define NETSNMP_FD_MASK_SIZE sizeof(((fd_set*)0)->fds_bits) 00078 00080 #define NETSNMP_BITS_PER_FD_MASK (8 * NETSNMP_FD_MASK_SIZE) 00081 00083 #define NETSNMP_FD_SET_ELEM_COUNT(setsize) \ 00084 (setsize + NETSNMP_BITS_PER_FD_MASK - 1) / NETSNMP_BITS_PER_FD_MASK 00085 00087 #define NETSNMP_FD_SET_BYTES(setsize) \ 00088 (NETSNMP_FD_SET_ELEM_COUNT(setsize) * NETSNMP_FD_MASK_SIZE) 00089 00091 #define NETSNMP_LARGE_FD_ZERO(fdset) \ 00092 do { \ 00093 int __i; \ 00094 fd_set *__arr = &(fdset)->lfs_set; \ 00095 __i = NETSNMP_FD_SET_ELEM_COUNT((fdset)->lfs_setsize); \ 00096 for ( ; __i > 0; __i--) \ 00097 __arr->fds_bits[__i - 1] = 0; \ 00098 } while (0) 00099 00100 00101 void netsnmp_large_fd_setfd( int fd, netsnmp_large_fd_set *fdset); 00102 void netsnmp_large_fd_clr( int fd, netsnmp_large_fd_set *fdset); 00103 int netsnmp_large_fd_is_set(int fd, netsnmp_large_fd_set *fdset); 00104 00105 #endif 00106 00115 NETSNMP_IMPORT 00116 void netsnmp_large_fd_set_init( netsnmp_large_fd_set *fdset, int setsize); 00117 00122 void netsnmp_large_fd_set_resize( netsnmp_large_fd_set *fdset, int setsize); 00123 00132 NETSNMP_IMPORT 00133 int netsnmp_large_fd_set_select(int numfds, netsnmp_large_fd_set *readfds, 00134 netsnmp_large_fd_set *writefds, 00135 netsnmp_large_fd_set *exceptfds, 00136 struct timeval *timeout); 00137 00139 NETSNMP_IMPORT 00140 void netsnmp_large_fd_set_cleanup(netsnmp_large_fd_set *fdset); 00141 00147 void netsnmp_copy_fd_set_to_large_fd_set(netsnmp_large_fd_set *dst, 00148 const fd_set *src); 00149 00156 int netsnmp_copy_large_fd_set_to_fd_set( fd_set *dst, 00157 const netsnmp_large_fd_set *src); 00158 00159 #ifdef __cplusplus 00160 } 00161 #endif 00162 00163 00164 #endif /* LARGE_FD_SET_H */