Ruby  2.5.0dev(2017-10-22revision60238)
sockport.h
Go to the documentation of this file.
1 /************************************************
2 
3  sockport.h -
4 
5  $Author$
6  created at: Fri Apr 30 23:19:34 JST 1999
7 
8 ************************************************/
9 
10 #ifndef SOCKPORT_H
11 #define SOCKPORT_H
12 
13 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
14 # define VALIDATE_SOCKLEN(addr, len) ((addr)->sa_len == (len))
15 #else
16 # define VALIDATE_SOCKLEN(addr, len) ((void)(addr), (void)(len), 1)
17 #endif
18 
19 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
20 # define SET_SA_LEN(sa, len) (void)((sa)->sa_len = (len))
21 #else
22 # define SET_SA_LEN(sa, len) (void)(len)
23 #endif
24 
25 /* for strict-aliasing rule */
26 #ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
27 # define SET_SIN_LEN(sa, len) (void)((sa)->sin_len = (len))
28 #else
29 # define SET_SIN_LEN(sa, len) SET_SA_LEN((struct sockaddr *)(sa), (len))
30 #endif
31 
32 #ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
33 # define SET_SIN6_LEN(sa, len) (void)((sa)->sin6_len = (len))
34 #else
35 # define SET_SIN6_LEN(sa, len) SET_SA_LEN((struct sockaddr *)(sa), (len))
36 #endif
37 
38 #define INIT_SOCKADDR(addr, family, len) \
39  do { \
40  struct sockaddr *init_sockaddr_ptr = (addr); \
41  socklen_t init_sockaddr_len = (len); \
42  memset(init_sockaddr_ptr, 0, init_sockaddr_len); \
43  init_sockaddr_ptr->sa_family = (family); \
44  SET_SA_LEN(init_sockaddr_ptr, init_sockaddr_len); \
45  } while (0)
46 
47 #define INIT_SOCKADDR_IN(addr, len) \
48  do { \
49  struct sockaddr_in *init_sockaddr_ptr = (addr); \
50  socklen_t init_sockaddr_len = (len); \
51  memset(init_sockaddr_ptr, 0, init_sockaddr_len); \
52  init_sockaddr_ptr->sin_family = AF_INET; \
53  SET_SIN_LEN(init_sockaddr_ptr, init_sockaddr_len); \
54  } while (0)
55 
56 #define INIT_SOCKADDR_IN6(addr, len) \
57  do { \
58  struct sockaddr_in6 *init_sockaddr_ptr = (addr); \
59  socklen_t init_sockaddr_len = (len); \
60  memset(init_sockaddr_ptr, 0, init_sockaddr_len); \
61  init_sockaddr_ptr->sin6_family = AF_INET6; \
62  SET_SIN6_LEN(init_sockaddr_ptr, init_sockaddr_len); \
63  } while (0)
64 
65 
66 /* for strict-aliasing rule */
67 #ifdef HAVE_TYPE_STRUCT_SOCKADDR_UN
68 # ifdef HAVE_STRUCT_SOCKADDR_IN_SUN_LEN
69 # define SET_SUN_LEN(sa, len) (void)((sa)->sun_len = (len))
70 # else
71 # define SET_SUN_LEN(sa, len) SET_SA_LEN((struct sockaddr *)(sa), (len))
72 # endif
73 # define INIT_SOCKADDR_UN(addr, len) \
74  do { \
75  struct sockaddr_un *init_sockaddr_ptr = (addr); \
76  socklen_t init_sockaddr_len = (len); \
77  memset(init_sockaddr_ptr, 0, init_sockaddr_len); \
78  init_sockaddr_ptr->sun_family = AF_UNIX; \
79  SET_SUN_LEN(init_sockaddr_ptr, init_sockaddr_len); \
80  } while (0)
81 #endif
82 
83 #ifndef IN_MULTICAST
84 # define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000)
85 # define IN_MULTICAST(i) IN_CLASSD(i)
86 #endif
87 
88 #ifndef IN_EXPERIMENTAL
89 # define IN_EXPERIMENTAL(i) ((((long)(i)) & 0xe0000000) == 0xe0000000)
90 #endif
91 
92 #ifndef IN_CLASSA_NSHIFT
93 # define IN_CLASSA_NSHIFT 24
94 #endif
95 
96 #ifndef IN_LOOPBACKNET
97 # define IN_LOOPBACKNET 127
98 #endif
99 
100 #ifndef AF_UNSPEC
101 # define AF_UNSPEC 0
102 #endif
103 
104 #ifndef PF_UNSPEC
105 # define PF_UNSPEC AF_UNSPEC
106 #endif
107 
108 #ifndef PF_INET
109 # define PF_INET AF_INET
110 #endif
111 
112 #if defined(HOST_NOT_FOUND) && !defined(h_errno) && !defined(__CYGWIN__)
113 extern int h_errno;
114 #endif
115 
116 #endif