Ruby: ext/socket/sockport.h Source File

Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)

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__)
113extern int h_errno;
114#endif
115
116#endif