28 #ifndef  M2M_M2MB_SOCKET_API_H    29 #define  M2M_M2MB_SOCKET_API_H    46 #define M2MB_SOCKET_BSD_INVALID_SOCKET  (M2MB_SOCKET_BSD_SOCKET)(~0)         49 #define M2MB_SOCKET_BSD_SOCK_STREAM    1                                    50 #define M2MB_SOCKET_BSD_SOCK_DGRAM     2                                    51 #define M2MB_SOCKET_BSD_SOCK_RAW       3                                    54 #define M2MB_SOCKET_BSD_AF_UNSPEC      0                                    55 #define M2MB_SOCKET_BSD_AF_INET        2                                    56 #define M2MB_SOCKET_BSD_AF_INET6       3                                    57 #define M2MB_SOCKET_BSD_AF_INET_DUAL46  4                           58 #define M2MB_SOCKET_BSD_AF_PACKET       5                           61 #define M2MB_SOCKET_BSD_PF_UNSPEC      0                                    62 #define M2MB_SOCKET_BSD_PF_INET        2                                    65 #define M2MB_SOCKET_BSD_IPPROTO_DFLT     0                          66 #define M2MB_SOCKET_BSD_IPPROTO_TCP    6                                    67 #define M2MB_SOCKET_BSD_IPPROTO_UDP   17                                    68 #define M2MB_SOCKET_BSD_IPPROTO_ICMP   1                                    73 #define M2MB_SOCKET_BSD_SOL_SOCKET       (0xfff)                    75 #define M2MB_SOCKET_BSD_SO_DEBUG         0x0001            76 #define M2MB_SOCKET_BSD_SO_ACCEPTCONN    0x0002            77 #define M2MB_SOCKET_BSD_SO_REUSEADDR     0x0004            78 #define M2MB_SOCKET_BSD_SO_KEEPALIVE     0x0008            79 #define M2MB_SOCKET_BSD_SO_DONTROUTE     0x0010            80 #define M2MB_SOCKET_BSD_SO_BROADCAST     0x0020            81 #define M2MB_SOCKET_BSD_SO_USELOOPBACK   0x0040            82 #define M2MB_SOCKET_BSD_SO_LINGER        0x0080            83 #define M2MB_SOCKET_BSD_SO_OOBINLINE     0x0100            84 #define M2MB_SOCKET_BSD_SO_DONTLINGER   (INT32)(~M2MB_SOCKET_BSD_SO_LINGER)     85 #define M2MB_SOCKET_BSD_SO_REUSEPORT     0x0200             86 #define M2MB_SOCKET_BSD_SO_SNDBUF        0x1001             87 #define M2MB_SOCKET_BSD_SO_RCVBUF        0x1002             88 #define M2MB_SOCKET_BSD_SO_SNDLOWAT      0x1003             89 #define M2MB_SOCKET_BSD_SO_RCVLOWAT      0x1004             90 #define M2MB_SOCKET_BSD_SO_SNDTIMEO      0x1005             91 #define M2MB_SOCKET_BSD_SO_RCVTIMEO      0x1006             92 #define M2MB_SOCKET_BSD_SO_ERROR         0x1007             93 #define M2MB_SOCKET_BSD_SO_TYPE          0x1008             94 #define M2MB_SOCKET_BSD_SO_CONTIMEO      0x1009               95 #define M2MB_SOCKET_BSD_SO_NO_CHECK      0x1010               96 #define M2MB_SOCKET_BSD_SO_BINDTODEVICE  0x100b             98 #define M2MB_SOCKET_BSD_IPPROTO_IP          0                       99 #define M2MB_SOCKET_BSD_IP_TOS              1            100 #define M2MB_SOCKET_BSD_IP_TTL              2            101 #define M2MB_SOCKET_BSD_IP_ADD_MEMBERSHIP   3                      102 #define M2MB_SOCKET_BSD_IP_DROP_MEMBERSHIP  4                      106 #define M2MB_SOCKET_BSD_IP_MULTICAST_TTL    5            107 #define M2MB_SOCKET_BSD_IP_MULTICAST_IF     6            108 #define M2MB_SOCKET_BSD_IP_MULTICAST_LOOP   7            109 #define M2MB_SOCKET_BSD_IP_PKTINFO          8            111 #define M2MB_SOCKET_BSD_IPPROTO_IPV6        41           115 #define M2MB_SOCKET_IPV6_CHECKSUM            7           116 #define M2MB_SOCKET_IPV6_V6ONLY             27           117 #define M2MB_SOCKET_BSD_IPV6_JOIN_GROUP     12           118 #define M2MB_SOCKET_BSD_IPV6_LEAVE_GROUP    13           119 #define M2MB_SOCKET_BSD_IPV6_ADD_MEMBERSHIP   M2MB_SOCKET_BSD_IPV6_JOIN_GROUP           120 #define M2MB_SOCKET_BSD_IPV6_DROP_MEMBERSHIP  M2MB_SOCKET_BSD_IPV6_LEAVE_GROUP           122 #define M2MB_SOCKET_BSD_IPPROTO_TCP      6               123 #define M2MB_SOCKET_BSD_TCP_NODELAY      0x01            124 #define M2MB_SOCKET_BSD_TCP_KEEPALIVE    0x02            125 #define M2MB_SOCKET_BSD_TCP_KEEPIDLE     0x03            126 #define M2MB_SOCKET_BSD_TCP_KEEPINTVL    0x04            127 #define M2MB_SOCKET_BSD_TCP_KEEPCNT      0x05            129 #define M2MB_SOCKET_BSD_IPPROTO_UDPLITE    136           133 #define M2MB_SOCKET_BSD_UDPLITE_SEND_CSCOV 0x01          134 #define M2MB_SOCKET_BSD_UDPLITE_RECV_CSCOV 0x02          137 #define M2MB_SOCKET_BSD_SO_TCPSACK       0x00200           138 #define M2MB_SOCKET_BSD_SO_WINSCALE      0x00400         139 #define M2MB_SOCKET_BSD_SO_TIMESTAMP     0x00800           140 #define M2MB_SOCKET_BSD_SO_BIGCWND       0x01000           141 #define M2MB_SOCKET_BSD_SO_HDRINCL       0x02000         142 #define M2MB_SOCKET_BSD_SO_NOSLOWSTART   0x04000         143 #define M2MB_SOCKET_BSD_SO_FULLMSS       0x08000         145 #define M2MB_SOCKET_BSD_SO_HOPCNT        0x1009            146 #define M2MB_SOCKET_BSD_SO_MAXMSG        0x1010            147 #define M2MB_SOCKET_BSD_SO_RXDATA        0x1011            148 #define M2MB_SOCKET_BSD_SO_TXDATA        0x1012            149 #define M2MB_SOCKET_BSD_SO_MYADDR        0x1013            150 #define M2MB_SOCKET_BSD_SO_NBIO                  0x1014            151 #define M2MB_SOCKET_BSD_SO_BIO           0x1015            152 #define M2MB_SOCKET_BSD_SO_NONBLOCK      0x1016            153 #define M2MB_SOCKET_BSD_SO_CALLBACK      0x1017            154 #define M2MB_SOCKET_BSD_SO_UDPCALLBACK   0x1019            156 #define M2MB_SOCKET_BSD_IPV6_MULTICAST_IF   80                     157 #define M2MB_SOCKET_BSD_IPV6_MULTICAST_HOPS 81                     158 #define M2MB_SOCKET_BSD_IPV6_MULTICAST_LOOP 82                     160 #define M2MB_SOCKET_BSD_IP_HDRINCL          2                      161 #define M2MB_SOCKET_BSD_IP_TTL_OPT          4                      163 #define M2MB_SOCKET_BSD_IP_OPTIONS          1                      164 #define M2MB_SOCKET_BSD_IPV6_SCOPEID        14                     165 #define M2MB_SOCKET_BSD_IPV6_UNICAST_HOPS   15                     166 #define M2MB_SOCKET_BSD_IPV6_TCLASS         16                     174 #define M2MB_SOCKET_BSD_INADDR_ANY           (UINT32) 0x00000000           176 #define M2MB_SOCKET_BSD_INADDR_LOOPBACK          (UINT32) 0x7f000001       178 #define M2MB_SOCKET_BSD_INADDR_BROADCAST     (UINT32) 0xffffffff           184 #define M2MB_SOCKET_BSD_SHUT_RD    0x00       185 #define M2MB_SOCKET_BSD_SHUT_WR    0x01       186 #define M2MB_SOCKET_BSD_SHUT_RDWR  0x02       191 #define M2MB_SOCKET_BSD_FIONREAD        0          192 #define M2MB_SOCKET_BSD_FIONBIO         1          199 #define M2MB_SOCKET_BSD_SOCKET_ERROR        (-1)   200 #define M2MB_SOCKET_BSD_SOCKNOERROR           0   201 #define M2MB_SOCKET_BSD_ENOBUFS        1       202 #define M2MB_SOCKET_BSD_ETIMEDOUT      2       203 #define M2MB_SOCKET_BSD_EISCONN        3       204 #define M2MB_SOCKET_BSD_EOPNOTSUPP     4       205 #define M2MB_SOCKET_BSD_ECONNABORTED   5       206 #define M2MB_SOCKET_BSD_EWOULDBLOCK    6           207 #define M2MB_SOCKET_BSD_ECONNREFUSED   7       208 #define M2MB_SOCKET_BSD_ECONNRESET     8       209 #define M2MB_SOCKET_BSD_ENOTCONN       9       210 #define M2MB_SOCKET_BSD_EBADF          9       211 #define M2MB_SOCKET_BSD_EALREADY       10      212 #define M2MB_SOCKET_BSD_EINVAL         11      213 #define M2MB_SOCKET_BSD_EMSGSIZE       12      214 #define M2MB_SOCKET_BSD_EPIPE          13      215 #define M2MB_SOCKET_BSD_EDESTADDRREQ   14      216 #define M2MB_SOCKET_BSD_ESHUTDOWN      15      217 #define M2MB_SOCKET_BSD_ENOPROTOOPT    16      218 #define M2MB_SOCKET_BSD_EHAVEOOB       17      219 #define M2MB_SOCKET_BSD_ENOMEM         18      220 #define M2MB_SOCKET_BSD_EADDRNOTAVAIL  19      221 #define M2MB_SOCKET_BSD_EADDRINUSE     20      222 #define M2MB_SOCKET_BSD_EAFNOSUPPORT   21      223 #define M2MB_SOCKET_BSD_EINPROGRESS    22      224 #define M2MB_SOCKET_BSD_ELOWER         23      225 #define M2MB_SOCKET_BSD_ENOTSOCK       24      226 #define M2MB_SOCKET_BSD_EIEIO          27      227 #define M2MB_SOCKET_BSD_ETOOMANYREFS   28      228 #define M2MB_SOCKET_BSD_EFAULT         29      229 #define M2MB_SOCKET_BSD_ENETUNREACH    30      235 #define M2MB_SOCKET_HOST_NOT_FOUND  210   236 #define M2MB_SOCKET_NO_DATA         211   237 #define M2MB_SOCKET_NO_RECOVERY     212   238 #define M2MB_SOCKET_TRY_AGAIN       213   239 #define M2MB_SOCKET_ERANGE       214   245 #define M2MB_SOCKET_MSG_OOB             0x04         246 #define M2MB_SOCKET_MSG_PEEK            0x01         247 #define M2MB_SOCKET_MSG_DONTROUTE       0x14         248 #define M2MB_SOCKET_MSG_DONTWAIT        0x08        249 #define M2MB_SOCKET_MSG_ZEROCOPYSEND    0x1000      252 #define M2MB_SOCKET_BSD_FD_SETSIZE      32   258 #define M2MB_SOCKET_MAX_SUPPORTED      16   263 #define MAKEIP(a,b,c,d) ((ULONG)d<<24 | (ULONG)c << 16 | (ULONG)b << 8 | (ULONG)a )   305 #define addr8_s     v6_v.addr8   306 #define addr16_s    v6_v.addr16   307 #define addr32_s    v6_v.addr32   399 #define Addr4     a.addr4   400 #define Addr6     a.addr6   460 #define m2mb_socket_bsd_htonl(l) (((((l) >> 24) & 0x000000ff)) | \   461                                                 ((((l) >>  8) & 0x0000ff00)) | \   462                                                 (((l) & 0x0000ff00) <<  8) | \   463                                                 (((l) & 0x000000ff) << 24))   487 #define m2mb_socket_bsd_ntohl(l) m2mb_socket_bsd_htonl(l)   512 #define m2mb_socket_bsd_htons(s)    ((((s) >> 8) & 0xff) | (((s) << 8) & 0xff00))   537 #define m2mb_socket_bsd_ntohs(s) m2mb_socket_bsd_htons(s) INT32 m2mb_socket_bsd_recv_from(M2MB_SOCKET_BSD_SOCKET s, void *buf, INT32 len, INT32 flags, M2MB_SOCKET_BSD_SOCKADDR_T *from, INT32 *fromlen)
Receive a message from a socket. 
M2MB_IP4_ADDR_T imr_multiaddr
struct M2MB_SOCKET_BSD_IPV6_ADDR M2MB_SOCKET_BSD_IPV6_ADDR_T
Structure for storing IPV6. 
Socket IPv4/IPv6 Internet address union. 
INT32 m2mb_socket_bsd_close(M2MB_SOCKET_BSD_SOCKET s)
Close a socket. 
struct M2MB_IP_MREQ M2MB_IP_MREQ_T
Argument structure for M2MB_SOCKET_BSD_IP_ADD_MEMBERSHIP and M2MB_SOCKET_BSD_IP_DROP_MEMBERSHIP. 
INT32 m2mb_socket_bsd_fd_zero_func(M2MB_SOCKET_BSD_FD_SET_T *set)
Used for m2mb_socket_bsd_select() 
INT32 m2mb_socket_set_cid(M2MB_SOCKET_BSD_SOCKET s, UINT8 cid)
Link a socket to a CID. 
struct M2MB_SOCKET_BSD_IN6_ADDR M2MB_SOCKET_BSD_IN6_ADDR_T
Structure for storing IPV6. 
struct M2MB_SOCKET_BSD_SOCKADDR_IN6 M2MB_SOCKET_BSD_SOCKADDR_IN6_T
CHAR * m2mb_socket_bsd_inet_ntop(INT32 af, const void *src, CHAR *dst, INT32 size)
Converts IPv4 and IPv6 addresses from binary to text form. 
struct M2MB_SOCKET_BSD_IPV6_ADDR sin6_addr
Argument structure for M2MB_SOCKET_BSD_IP_ADD_MEMBERSHIP and M2MB_SOCKET_BSD_IP_DROP_MEMBERSHIP. 
INT32 m2mb_socket_bsd_bind(M2MB_SOCKET_BSD_SOCKET s, struct M2MB_SOCKET_BSD_SOCKADDR *name, INT32 namelen)
Bind the address with the socket. 
INT32 m2mb_socket_errno(INT32 fd)
Gets the last error occurred. 
INT32 m2mb_socket_bsd_get_sock_name(M2MB_SOCKET_BSD_SOCKET s, struct M2MB_SOCKET_BSD_SOCKADDR *name, INT32 *namelen)
Get socket name. 
struct M2MB_SOCKET_BSD_SOCKADDR_IN M2MB_SOCKET_BSD_SOCKADDR_IN_T
struct M2MB_SOCKET_BSD_LINGER M2MB_SOCKET_BSD_LINGER_T
INT32 m2mb_socket_bsd_ioctl(M2MB_SOCKET_BSD_SOCKET s, INT32 cmd, void *argp)
IO control function. 
struct M2MB_SOCKET_BSD_HOSTENT M2MB_SOCKET_BSD_HOSTENT_T
INT32 m2mb_socket_bsd_select(INT32 nfds, M2MB_SOCKET_BSD_FD_SET_T *readfds, M2MB_SOCKET_BSD_FD_SET_T *writefds, M2MB_SOCKET_BSD_FD_SET_T *exceptfds, const struct M2MB_SOCKET_BSD_TIMEVAL *timeout)
synchronous I/O multiplexing 
unsigned long M2MB_IP4_ADDR_T
IPv4 Internet address. 
INT32 m2mb_socket_bsd_connect(M2MB_SOCKET_BSD_SOCKET s, const struct M2MB_SOCKET_BSD_SOCKADDR *name, INT32 namelen)
connect a socket 
struct M2MB_SOCKET_BSD_SOCKADDR M2MB_SOCKET_BSD_SOCKADDR_T
#define M2MB_SOCKET_BSD_FD_SETSIZE
struct M2MB_SOCKET_BSD_IN_ADDR M2MB_SOCKET_BSD_IN_ADDR_T
INT32 m2mb_socket_TCP_Keepalive_Set(INT32 idle_Time, INT32 resp_Timeout)
Set TCP Keepalive parameters. 
INT32 m2mb_socket_bsd_set_sock_opt(M2MB_SOCKET_BSD_SOCKET s, INT32 level, INT32 optname, const void *optval, INT32 optlen)
Set options on sockets. 
INT32 m2mb_socket_bsd_fd_clr_func(INT32 fd, M2MB_SOCKET_BSD_FD_SET_T *set)
Used for m2mb_socket_bsd_select() 
struct M2MB_SOCKET_BSD_FD_SET M2MB_SOCKET_BSD_FD_SET_T
struct M2MB_IP46_ADDR M2MB_IP46_ADDR_T
Socket IPv4/IPv6 Internet address union. 
INT32 m2mb_socket_bsd_get_peer_name(M2MB_SOCKET_BSD_SOCKET s, struct M2MB_SOCKET_BSD_SOCKADDR *name, INT32 *namelen)
Get the name of the peer socket. 
Structure for storing IPV6. 
INT32 m2mb_socket_bsd_fd_set_func(INT32 fd, M2MB_SOCKET_BSD_FD_SET_T *set)
Used for m2mb_socket_bsd_select() 
struct M2MB_IP6_ADDR M2MB_IP6_ADDR_T
IPv6 Internet address. 
union M2MB_IP46_ADDR::@5 a
UINT8 fd_bits[M2MB_SOCKET_BSD_FD_SETSIZE]
INT32 m2mb_socket_bsd_send_to(M2MB_SOCKET_BSD_SOCKET s, const void *buf, INT32 len, INT32 flags, const struct M2MB_SOCKET_BSD_SOCKADDR *to, INT32 tolen)
send a message on a socket 
INT32 m2mb_socket_TCP_Keepalive_Get(INT32 *idle_Time, INT32 *resp_Timeout)
Get TCP Keepalive parameters. 
INT32 m2mb_socket_bsd_send(M2MB_SOCKET_BSD_SOCKET s, const void *buf, INT32 len, INT32 flags)
Send a message on a socket. 
struct M2MB_SOCKET_BSD_TIMEVAL M2MB_SOCKET_BSD_TIMEVAL_T
INT32(* M2MB_NET_UDP_ZEROCOPY_CB)(void *so, void *packet, INT32 errcode, void *from, INT32 family)
UDP zero-copy application RX callback handler. 
INT32(* M2MB_NET_TCP_ZEROCOPY_CB)(void *so, void *packet, INT32 errcode)
TCP zero-copy application RX callback handler. 
M2MB_IP4_ADDR_T imr_interface
M2MB_SOCKET_BSD_IN_ADDR_T sin_addr
VOID M2MB_IPv6_CHANGE_ENDIAN(UINT32 *a)
Conversion between host and network byte order. 
INT32 m2mb_socket_bsd_inet_pton(INT32 af, const CHAR *src, void *dst)
Converts IPv4 and IPv6 addresses from text to binary form. 
INT32 m2mb_socket_bsd_get_sock_opt(M2MB_SOCKET_BSD_SOCKET s, INT32 level, INT32 optname, void *optval, INT32 *optlen)
Get options from sockets. 
INT32 m2mb_socket_bsd_recv(M2MB_SOCKET_BSD_SOCKET s, void *buf, INT32 len, INT32 flags)
Receive a message from a socket. 
INT32 m2mb_socket_bsd_listen(M2MB_SOCKET_BSD_SOCKET s, INT32 backlog)
Listen for connections on a socket. 
union M2MB_SOCKET_BSD_IPV6_ADDR::@4 v6_v
INT32 m2mb_socket_bsd_fd_isset_func(INT32 fd, M2MB_SOCKET_BSD_FD_SET_T *set)
Used for m2mb_socket_bsd_select() 
Structure for storing IPV6. 
iHANDLE M2MB_SOCKET_BSD_SOCKET
M2MB_SOCKET_BSD_SOCKET m2mb_socket_bsd_socket(INT32 domain, INT32 type, INT32 protocol)
Create an endpoint for communication. 
#define m2mb_socket_bsd_htonl(l)
Conversion between host and network byte order. 
INT32 m2mb_socket_bsd_get_host_by_name_2_r_cid(const CHAR *name, INT32 af, struct M2MB_SOCKET_BSD_HOSTENT *ret, CHAR *buf, INT32 buflen, struct M2MB_SOCKET_BSD_HOSTENT **result, INT32 *h_errnop, UINT8 cid)
Get network host entry. 
M2MB_SOCKET_BSD_SOCKET m2mb_socket_bsd_accept(M2MB_SOCKET_BSD_SOCKET s, struct M2MB_SOCKET_BSD_SOCKADDR *name, INT32 *namelen)
Accept a connection on a socket.