Bug Summary

File:obj/gnu/usr.bin/perl/cpan/Socket/Socket.c
Warning:line 1740, column 7
Value stored to 'mreq_sv' during its initialization is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple amd64-unknown-openbsd7.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name Socket.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 1 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/obj/gnu/usr.bin/perl/cpan/Socket -resource-dir /usr/local/lib/clang/13.0.0 -D NO_LOCALE_NUMERIC -D NO_LOCALE_COLLATE -D VERSION="2.029" -D XS_VERSION="2.029" -D PIC -I ../.. -internal-isystem /usr/local/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -Wwrite-strings -fconst-strings -fdebug-compilation-dir=/usr/obj/gnu/usr.bin/perl/cpan/Socket -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /home/ben/Projects/vmm/scan-build/2022-01-12-194120-40624-1 -x c Socket.c
1/*
2 * This file was generated automatically by ExtUtils::ParseXS version 3.40 from the
3 * contents of Socket.xs. Do not edit this file, edit Socket.xs instead.
4 *
5 * ANY CHANGES MADE HERE WILL BE LOST!
6 *
7 */
8
9#line 1 "Socket.xs"
10#define PERL_NO_GET_CONTEXT
11#include "EXTERN.h"
12#include "perl.h"
13#include "XSUB.h"
14
15#include <stddef.h>
16
17#ifdef I_SYS_TYPES
18# include <sys/types.h>
19#endif
20#if !defined(ultrix) /* Avoid double definition. */
21# include <sys/socket.h>
22#endif
23#if defined(USE_SOCKS) && defined(I_SOCKS)
24# include <socks.h>
25#endif
26#ifdef MPE
27# define PF_INET2 AF_INET2
28# define PF_UNIX1 AF_UNIX1
29# define SOCK_RAW3 3
30#endif
31#ifdef I_SYS_UN
32# include <sys/un.h>
33#endif
34/* XXX Configure test for <netinet/in_systm.h needed XXX */
35#if defined(NeXT) || defined(__NeXT__)
36# include <netinet/in_systm.h>
37#endif
38#if defined(__sgi) && !defined(AF_LINK18) && defined(PF_LINK18) && PF_LINK18 == AF_LNK
39# undef PF_LINK18
40#endif
41#if defined(I_NETINET_IN) || defined(__ultrix__)
42# include <netinet/in.h>
43#endif
44#if defined(I_NETINET_IP)
45# include <netinet/ip.h>
46#endif
47#ifdef I_NETDB
48# if !defined(ultrix) /* Avoid double definition. */
49# include <netdb.h>
50# endif
51#endif
52#ifdef I_ARPA_INET
53# include <arpa/inet.h>
54#endif
55#ifdef I_NETINET_TCP
56# include <netinet/tcp.h>
57#endif
58
59#if defined(WIN32) && !defined(UNDER_CE)
60# include <ws2tcpip.h>
61#endif
62
63#ifdef WIN32
64
65/* VC 6 with its original headers doesn't know about sockaddr_storage, VC 2003 does*/
66#ifndef _SS_MAXSIZE
67
68# define _SS_MAXSIZE 128
69# define _SS_ALIGNSIZE (sizeof(__int64))
70
71# define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (short))
72# define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (short) + _SS_PAD1SIZE \
73 + _SS_ALIGNSIZE))
74
75struct sockaddr_storage {
76 short ss_family;
77 char __ss_pad1[_SS_PAD1SIZE];
78 __int64 __ss_align;
79 char __ss_pad2[_SS_PAD2SIZE];
80};
81
82typedef int socklen_t;
83
84#define in6_addr in_addr6
85
86#define INET_ADDRSTRLEN16 22
87#define INET6_ADDRSTRLEN46 65
88
89#endif
90
91/*
92 * Under Windows, sockaddr_un is defined in afunix.h. Unfortunately
93 * MinGW and SDKs older than 10.0.17063.0 don't have it, so we have to
94 * define it here. Don't worry, it's portable. Windows has ironclad ABI
95 * stability guarantees which means that the definitions will *never*
96 * change.
97 */
98#ifndef UNIX_PATH_MAX
99
100#define UNIX_PATH_MAX 108
101
102struct sockaddr_un
103{
104 USHORT sun_family;
105 char sun_path[UNIX_PATH_MAX];
106};
107
108#endif
109
110static int inet_pton(int af, const char *src, void *dst)
111{
112 struct sockaddr_storage ss;
113 int size = sizeof(ss);
114 ss.ss_family = af; /* per MSDN */
115
116 if (WSAStringToAddress((char*)src, af, NULL((void*)0), (struct sockaddr *)&ss, &size) != 0)
117 return 0;
118
119 switch(af) {
120 case AF_INET2:
121 *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr;
122 return 1;
123 case AF_INET624:
124 *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr;
125 return 1;
126 default:
127 WSASetLastError(WSAEAFNOSUPPORT);
128 return -1;
129 }
130}
131
132static const char *inet_ntop(int af, const void *src, char *dst, socklen_t size)
133{
134 struct sockaddr_storage ss;
135 unsigned long s = size;
136
137 ZeroMemory(&ss, sizeof(ss));
138 ss.ss_family = af;
139
140 switch(af) {
141 case AF_INET2:
142 ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src;
143 break;
144 case AF_INET624:
145 ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src;
146 break;
147 default:
148 return NULL((void*)0);
149 }
150
151 /* cannot directly use &size because of strict aliasing rules */
152 if (WSAAddressToString((struct sockaddr *)&ss, sizeof(ss), NULL((void*)0), dst, &s) != 0)
153 return NULL((void*)0);
154 else
155 return dst;
156}
157
158#define HAS_INETPTON
159#define HAS_INETNTOP
160#endif
161
162#ifdef NETWARE
163NETDB_DEFINE_CONTEXT
164NETINET_DEFINE_CONTEXT
165#endif
166
167#ifdef I_SYSUIO
168# include <sys/uio.h>
169#endif
170
171#ifndef AF_NBS
172# undef PF_NBS
173#endif
174
175#ifndef AF_X25
176# undef PF_X25
177#endif
178
179#ifndef INADDR_NONE((u_int32_t)(0xffffffff))
180# define INADDR_NONE((u_int32_t)(0xffffffff)) 0xffffffff
181#endif /* INADDR_NONE */
182#ifndef INADDR_BROADCAST((u_int32_t)(0xffffffff))
183# define INADDR_BROADCAST((u_int32_t)(0xffffffff)) 0xffffffff
184#endif /* INADDR_BROADCAST */
185#ifndef INADDR_LOOPBACK((u_int32_t)(0x7f000001))
186# define INADDR_LOOPBACK((u_int32_t)(0x7f000001)) 0x7F000001
187#endif /* INADDR_LOOPBACK */
188
189#ifndef INET_ADDRSTRLEN16
190#define INET_ADDRSTRLEN16 16
191#endif
192
193#ifndef C_ARRAY_LENGTH
194#define C_ARRAY_LENGTH(arr)(sizeof(arr)/sizeof((arr)[0])) (sizeof(arr) / sizeof(*(arr)))
195#endif /* !C_ARRAY_LENGTH */
196
197#ifndef PERL_UNUSED_VAR
198# define PERL_UNUSED_VAR(x)((void)sizeof(x)) ((void)x)
199#endif /* !PERL_UNUSED_VAR */
200
201#ifndef PERL_UNUSED_ARG
202# define PERL_UNUSED_ARG(x)((void)sizeof(x)) PERL_UNUSED_VAR(x)((void)sizeof(x))
203#endif /* !PERL_UNUSED_ARG */
204
205#ifndef Newx
206# define Newx(v,n,t)(v = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(n) || sizeof(t) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(n)))) ? (size_t)(n) : ((size_t)-1)/sizeof(t)) > ((
size_t)-1)/sizeof(t))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), (t*)(Perl_safesysmalloc((size_t
)((n)*sizeof(t))))))
New(0,v,n,t)(v = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(n) || sizeof(t) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(n)))) ? (size_t)(n) : ((size_t)-1)/sizeof(t)) > ((
size_t)-1)/sizeof(t))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), (t*)(Perl_safesysmalloc((size_t
)((n)*sizeof(t))))))
207#endif /* !Newx */
208
209#ifndef SvPVx_nolen
210#if defined(__GNUC__4) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
211# define SvPVx_nolen(sv)({SV *_sv = (sv); ((((_sv)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((_sv)->sv_u.svu_pv) : Perl_sv_2pv_flags
( _sv,0,2)); })
({SV *_sv = (sv); SvPV_nolen(_sv)((((_sv)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((_sv)->sv_u.svu_pv) : Perl_sv_2pv_flags( _sv,0,2))
; })
212#else /* __GNUC__ */
213# define SvPVx_nolen(sv)({SV *_sv = (sv); ((((_sv)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((_sv)->sv_u.svu_pv) : Perl_sv_2pv_flags
( _sv,0,2)); })
((PL_Sv = (sv)), SvPV_nolen(PL_Sv)((((PL_Sv)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((PL_Sv)->sv_u.svu_pv) : Perl_sv_2pv_flags( PL_Sv,0,2)
)
)
214#endif /* __GNU__ */
215#endif /* !SvPVx_nolen */
216
217#ifndef croak_sv
218# define croak_sv(sv)Perl_croak_sv( sv) croakPerl_croak("%s", SvPVx_nolen(sv)({SV *_sv = (sv); ((((_sv)->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((_sv)->sv_u.svu_pv) : Perl_sv_2pv_flags
( _sv,0,2)); })
)
219#endif
220
221#ifndef hv_stores
222# define hv_stores(hv, keystr, val)((SV**) Perl_hv_common_key_len( ((hv)),(("" keystr "")),((sizeof
(keystr)-1)),(0x04|0x20),((val)),(0)))
\
223 hv_store(hv, ""keystr"", sizeof(keystr)-1, val, 0)((SV**) Perl_hv_common_key_len( (hv),(""keystr""),(sizeof(keystr
)-1),(0x04|0x20),(val),(0)))
224#endif /* !hv_stores */
225
226#ifndef newSVpvn_flags
227# define newSVpvn_flags(s,len,flags)Perl_newSVpvn_flags( s,len,flags) my_newSVpvn_flags(aTHX_ s,len,flags)
228static SV *my_newSVpvn_flags(pTHX_ const char *s, STRLEN len, U32 flags)
229{
230 SV *sv = newSVpvn(s, len)Perl_newSVpvn( s,len);
231 SvFLAGS(sv)(sv)->sv_flags |= (flags & SVf_UTF80x20000000);
232 return (flags & SVs_TEMP0x00080000) ? sv_2mortal(sv)Perl_sv_2mortal( sv) : sv;
233}
234#endif /* !newSVpvn_flags */
235
236#ifndef SvRV_set
237# define SvRV_set(sv, val)do { ((void)0); ((void)0); ((void)0); ((sv)->sv_u.svu_rv =
(val)); } while (0)
(SvRV(sv)((sv)->sv_u.svu_rv) = (val))
238#endif /* !SvRV_set */
239
240#ifndef SvPV_nomg
241# define SvPV_nomg SvPV
242#endif /* !SvPV_nomg */
243
244#ifndef HEK_FLAGS
245# define HEK_FLAGS(hek)(*((unsigned char *)((hek)->hek_key)+(hek)->hek_len+1)) 0
246# define HVhek_UTF80x01 1
247#endif /* !HEK_FLAGS */
248
249#ifndef hv_common
250/* These magic numbers are arbitrarily chosen (copied from perl core in fact)
251 * and only have to match between this definition and the code that uses them
252 */
253# define HV_FETCH_ISSTORE0x04 0x04
254# define HV_FETCH_LVALUE0x10 0x10
255# define hv_common(hv, keysv, key, klen, flags, act, val, hash)Perl_hv_common( hv,keysv,key,klen,flags,act,val,hash) \
256 my_hv_common(aTHX_ hv, keysv, key, klen, flags, act, val, hash)
257static void *my_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen,
258 int flags, int act, SV *val, U32 hash)
259{
260 /*
261 * This only handles the usage actually made by the code
262 * generated by ExtUtils::Constant. EU:C really ought to arrange
263 * portability of its generated code itself.
264 */
265 if (!keysv) {
266 keysv = sv_2mortal(newSVpvn(key, klen))Perl_sv_2mortal( Perl_newSVpvn( key,klen));
267 if (flags & HVhek_UTF80x01)
268 SvUTF8_on(keysv)((keysv)->sv_flags |= (0x20000000));
269 }
270 if (act == HV_FETCH_LVALUE0x10) {
271 return (void*)hv_fetch_ent(hv, keysv, 1, hash)((HE *) Perl_hv_common( (hv),(keysv),((void*)0),0,0,((1) ? 0x10
: 0),((void*)0),(hash)))
;
272 } else if (act == HV_FETCH_ISSTORE0x04) {
273 return (void*)hv_store_ent(hv, keysv, val, hash)((HE *) Perl_hv_common( (hv),(keysv),((void*)0),0,0,0x04,(val
),(hash)))
;
274 } else {
275 croakPerl_croak("panic: my_hv_common: act=0x%x", act);
276 }
277}
278#endif /* !hv_common */
279
280#ifndef hv_common_key_len
281# define hv_common_key_len(hv, key, kl, act, val, hash)Perl_hv_common_key_len( hv,key,kl,act,val,hash) \
282 my_hv_common_key_len(aTHX_ hv, key, kl, act, val, hash)
283static void *my_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 kl,
284 int act, SV *val, U32 hash)
285{
286 STRLEN klen;
287 int flags;
288 if (kl < 0) {
289 klen = -kl;
290 flags = HVhek_UTF80x01;
291 } else {
292 klen = kl;
293 flags = 0;
294 }
295 return hv_common(hv, NULL, key, klen, flags, act, val, hash)Perl_hv_common( hv,((void*)0),key,klen,flags,act,val,hash);
296}
297#endif /* !hv_common_key_len */
298
299#ifndef mPUSHi
300# define mPUSHi(i)Perl_sv_setiv( (*++sp = (Perl_sv_newmortal())),(IV)(i)) sv_setiv_mg(PUSHs(sv_newmortal()), (IV)(i))Perl_sv_setiv_mg( (*++sp = (Perl_sv_newmortal())),(IV)(i))
301#endif /* !mPUSHi */
302#ifndef mPUSHp
303# define mPUSHp(p,l)(*++sp = (Perl_newSVpvn_flags( (p),(l),0x00080000))) sv_setpvn_mg(PUSHs(sv_newmortal()), (p), (l))Perl_sv_setpvn_mg( (*++sp = (Perl_sv_newmortal())),(p),(l))
304#endif /* !mPUSHp */
305#ifndef mPUSHs
306# define mPUSHs(s)(*++sp = (Perl_sv_2mortal( s))) PUSHs(sv_2mortal(s))(*++sp = (Perl_sv_2mortal( s)))
307#endif /* !mPUSHs */
308
309#ifndef CvCONST_on
310# undef newCONSTSUB
311# define newCONSTSUB(stash, name, val)Perl_newCONSTSUB( stash,name,val) my_newCONSTSUB(aTHX_ stash, name, val)
312static CV *my_newCONSTSUB(pTHX_ HV *stash, char *name, SV *val)
313{
314 /*
315 * This has to satisfy code generated by ExtUtils::Constant.
316 * It depends on the 5.8+ layout of constant subs. It has
317 * two calls to newCONSTSUB(): one for real constants, and one
318 * for undefined constants. In the latter case, it turns the
319 * initially-generated constant subs into something else, and
320 * it needs the return value from newCONSTSUB() which Perl 5.6
321 * doesn't provide.
322 */
323 GV *gv;
324 CV *cv;
325 Perl_newCONSTSUB(aTHX_ stash, name, val);
326 ENTERPerl_push_scope();
327 SAVESPTR(PL_curstash)Perl_save_sptr( (SV**)&(PL_curstash));
328 PL_curstash = stash;
329 gv = gv_fetchpv(name, 0, SVt_PVCV)Perl_gv_fetchpv( name,0,SVt_PVCV);
330 cv = GvCV(gv)(0+(0+(gv)->sv_u.svu_gp)->gp_cv);
331 LEAVEPerl_pop_scope();
332 CvXSUBANY(cv)((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }))->xcv_start_u
.xcv_xsubany
.any_ptr = &PL_sv_undef(PL_sv_immortals[1]);
333 return cv;
334}
335# define CvCONST_off(cv)(((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }))->xcv_flags
&= ~0x0004)
my_CvCONST_off(aTHX_ cv)
336static void my_CvCONST_off(pTHX_ CV *cv)
337{
338 op_free(CvROOT(cv))Perl_op_free( ((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }
))->xcv_root_u.xcv_root)
;
339 CvROOT(cv)((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }))->xcv_root_u
.xcv_root
= NULL((void*)0);
340 CvSTART(cv)((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }))->xcv_start_u
.xcv_start
= NULL((void*)0);
341}
342#endif /* !CvCONST_on */
343
344#ifndef HAS_INET_ATON
345
346/*
347 * Check whether "cp" is a valid ascii representation
348 * of an Internet address and convert to a binary address.
349 * Returns 1 if the address is valid, 0 if not.
350 * This replaces inet_addr, the return value from which
351 * cannot distinguish between failure and a local broadcast address.
352 */
353static int
354my_inet_aton(register const char *cp, struct in_addr *addr)
355{
356 dTHXstruct Perl___notused_struct;
357 register U32 val;
358 register int base;
359 register char c;
360 int nparts;
361 const char *s;
362 unsigned int parts[4];
363 register unsigned int *pp = parts;
364
365 if (!cp || !*cp)
366 return 0;
367 for (;;) {
368 /*
369 * Collect number up to ".".
370 * Values are specified as for C:
371 * 0x=hex, 0=octal, other=decimal.
372 */
373 val = 0; base = 10;
374 if (*cp == '0') {
375 if (*++cp == 'x' || *cp == 'X')
376 base = 16, cp++;
377 else
378 base = 8;
379 }
380 while ((c = *cp) != '\0') {
381 if (isDIGIT(c)( ( (sizeof(c) == sizeof(U8)) ? ( (((U64) (((((U8) (c)))) - (
(('0')) | 0))) <= (((U64) (((('9') - ('0'))) | 0))))) : (sizeof
(c) == sizeof(U32)) ? ( (((U64) (((((U32) (c)))) - ((('0')) |
0))) <= (((U64) (((('9') - ('0'))) | 0))))) : ( ( (((U64)
(((((U64) (c)))) - ((('0')) | 0))) <= (((U64) (((('9') - (
'0'))) | 0))))))))
) {
382 val = (val * base) + (c - '0');
383 cp++;
384 continue;
385 }
386 if (base == 16 && (s=strchr(PL_hexdigit,c))) {
387 val = (val << 4) +
388 ((s - PL_hexdigit) & 15);
389 cp++;
390 continue;
391 }
392 break;
393 }
394 if (*cp == '.') {
395 /*
396 * Internet format:
397 * a.b.c.d
398 * a.b.c (with c treated as 16-bits)
399 * a.b (with b treated as 24 bits)
400 */
401 if (pp >= parts + 3 || val > 0xff)
402 return 0;
403 *pp++ = val, cp++;
404 } else
405 break;
406 }
407 /*
408 * Check for trailing characters.
409 */
410 if (*cp && !isSPACE(*cp)(( (sizeof(*cp) == 1) || !(((U64)((*cp) | 0)) & ~0xFF)) &&
((PL_charclass[(U8) (*cp)] & ((1U << (10)) | (1U <<
(14)))) == ((1U << (10)) | (1U << (14)))))
)
411 return 0;
412 /*
413 * Concoct the address according to
414 * the number of parts specified.
415 */
416 nparts = pp - parts + 1; /* force to an int for switch() */
417 switch (nparts) {
418
419 case 1: /* a -- 32 bits */
420 break;
421
422 case 2: /* a.b -- 8.24 bits */
423 if (val > 0xffffff)
424 return 0;
425 val |= parts[0] << 24;
426 break;
427
428 case 3: /* a.b.c -- 8.8.16 bits */
429 if (val > 0xffff)
430 return 0;
431 val |= (parts[0] << 24) | (parts[1] << 16);
432 break;
433
434 case 4: /* a.b.c.d -- 8.8.8.8 bits */
435 if (val > 0xff)
436 return 0;
437 val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
438 break;
439 }
440 addr->s_addr = htonl(val)(__uint32_t)(__builtin_constant_p(val) ? (__uint32_t)(((__uint32_t
)(val) & 0xff) << 24 | ((__uint32_t)(val) & 0xff00
) << 8 | ((__uint32_t)(val) & 0xff0000) >> 8 |
((__uint32_t)(val) & 0xff000000) >> 24) : __swap32md
(val))
;
441 return 1;
442}
443
444#undef inet_aton
445#define inet_aton my_inet_aton
446
447#endif /* ! HAS_INET_ATON */
448
449/* These are not gni() constants; they're extensions for the perl API */
450/* The definitions in Socket.pm and Socket.xs must match */
451#define NIx_NOHOST(1 << 0) (1 << 0)
452#define NIx_NOSERV(1 << 1) (1 << 1)
453
454/* On Windows, ole2.h defines a macro called "interface". We don't need that,
455 * and it will complicate the variables in pack_ip_mreq() etc. (RT87389)
456 */
457#undef interface
458
459/* STRUCT_OFFSET should have come from from perl.h, but if not,
460 * roll our own (not using offsetof() since that is C99). */
461#ifndef STRUCT_OFFSET
462# define STRUCT_OFFSET(s,m)__builtin_offsetof(s, m) (Size_tsize_t)(&(((s *)0)->m))
463#endif
464
465static int
466not_here(const char *s)
467{
468 croakPerl_croak("Socket::%s not implemented on this architecture", s);
469 return -1;
470}
471
472#define PERL_IN_ADDR_S_ADDR_SIZE4 4
473
474/*
475* Bad assumptions possible here.
476*
477* Bad Assumption 1: struct in_addr has no other fields
478* than the s_addr (which is the field we care about
479* in here, really). However, we can be fed either 4-byte
480* addresses (from pack("N", ...), or va.b.c.d, or ...),
481* or full struct in_addrs (from e.g. pack_sockaddr_in()),
482* which may or may not be 4 bytes in size.
483*
484* Bad Assumption 2: the s_addr field is a simple type
485* (such as an int, u_int32_t). It can be a bit field,
486* in which case using & (address-of) on it or taking sizeof()
487* wouldn't go over too well. (Those are not attempted
488* now but in case someone thinks to change the below code
489* to use addr.s_addr instead of addr, you have been warned.)
490*
491* Bad Assumption 3: the s_addr is the first field in
492* an in_addr, or that its bytes are the first bytes in
493* an in_addr.
494*
495* These bad assumptions are wrong in UNICOS which has
496* struct in_addr { struct { u_long st_addr:32; } s_da };
497* #define s_addr s_da.st_addr
498* and u_long is 64 bits.
499*
500* --jhi */
501
502#include "const-c.inc"
503
504#if defined(HAS_GETADDRINFO) && !defined(HAS_GAI_STRERROR)
505static const char *gai_strerror(int err)
506{
507 switch (err)
508 {
509#ifdef EAI_ADDRFAMILY-9
510 case EAI_ADDRFAMILY-9:
511 return "Address family for hostname is not supported.";
512#endif
513#ifdef EAI_AGAIN-3
514 case EAI_AGAIN-3:
515 return "The name could not be resolved at this time.";
516#endif
517#ifdef EAI_BADFLAGS-1
518 case EAI_BADFLAGS-1:
519 return "The flags parameter has an invalid value.";
520#endif
521#ifdef EAI_FAIL-4
522 case EAI_FAIL-4:
523 return "A non-recoverable error occurred while resolving the name.";
524#endif
525#ifdef EAI_FAMILY-6
526 case EAI_FAMILY-6:
527 return "The address family was not recognized or length is invalid.";
528#endif
529#ifdef EAI_MEMORY-10
530 case EAI_MEMORY-10:
531 return "A memory allocation failure occurred.";
532#endif
533#ifdef EAI_NODATA-5
534 case EAI_NODATA-5:
535 return "No address is associated with the hostname.";
536#endif
537#ifdef EAI_NONAME-2
538 case EAI_NONAME-2:
539 return "The name does not resolve for the supplied parameters.";
540#endif
541#ifdef EAI_OVERFLOW-14
542 case EAI_OVERFLOW-14:
543 return "An argument buffer overflowed.";
544#endif
545#ifdef EAI_SERVICE-8
546 case EAI_SERVICE-8:
547 return "The service parameter was not recognized for the specified socket type.";
548#endif
549#ifdef EAI_SOCKTYPE-7
550 case EAI_SOCKTYPE-7:
551 return "The specified socket type was not recognized.";
552#endif
553#ifdef EAI_SYSTEM-11
554 case EAI_SYSTEM-11:
555 return "A system error occurred - see errno.";
556#endif
557 default:
558 return "Unknown error in getaddrinfo().";
559 }
560}
561#endif
562
563#ifdef HAS_GETADDRINFO
564static SV *err_to_SV(pTHX_ int err)
565{
566 SV *ret = sv_newmortal()Perl_sv_newmortal();
567 (void) SvUPGRADE(ret, SVt_PVNV)((void)(((svtype)((ret)->sv_flags & 0xff)) >= (SVt_PVNV
) || (Perl_sv_upgrade( ret,SVt_PVNV),1)))
;
568
569 if(err) {
570 const char *error = gai_strerror(err);
571 sv_setpv(ret, error)Perl_sv_setpv( ret,error);
572 }
573 else {
574 sv_setpv(ret, "")Perl_sv_setpv( ret,"");
575 }
576
577 SvIV_set(ret, err)do { ((void)0); ((void)0); (((XPVIV*) (ret)->sv_any)->xiv_u
.xivu_iv = (err)); } while (0)
; SvIOK_on(ret)( (ret)->sv_flags |= (0x00000100|0x00001000));
578
579 return ret;
580}
581
582static void xs_getaddrinfo(pTHX_ CV *cv)
583{
584 dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
585
586 SV *host;
587 SV *service;
588 SV *hints;
589
590 char *hostname = NULL((void*)0);
591 char *servicename = NULL((void*)0);
592 STRLEN len;
593 struct addrinfo hints_s;
594 struct addrinfo *res;
595 struct addrinfo *res_iter;
596 int err;
597 int n_res;
598
599 PERL_UNUSED_ARG(cv)((void)sizeof(cv));
600 if(items > 3)
601 croakPerl_croak("Usage: Socket::getaddrinfo(host, service, hints)");
602
603 SPsp -= items;
604
605 if(items < 1)
606 host = &PL_sv_undef(PL_sv_immortals[1]);
607 else
608 host = ST(0)PL_stack_base[ax + (0)];
609
610 if(items < 2)
611 service = &PL_sv_undef(PL_sv_immortals[1]);
612 else
613 service = ST(1)PL_stack_base[ax + (1)];
614
615 if(items < 3)
616 hints = NULL((void*)0);
617 else
618 hints = ST(2)PL_stack_base[ax + (2)];
619
620 SvGETMAGIC(host)((void)(__builtin_expect(((((host)->sv_flags & 0x00200000
)) ? (_Bool)1 : (_Bool)0),(0)) && Perl_mg_get( host))
)
;
621 if(SvOK(host)((host)->sv_flags & (0x00000100|0x00000200|0x00000400|
0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
) {
622 hostname = SvPV_nomg(host, len)((((host)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((len = ((XPV*) (host)->sv_any)->xpv_cur), ((host)->
sv_u.svu_pv)) : Perl_sv_2pv_flags( host,&len,0))
;
623 if (!len)
624 hostname = NULL((void*)0);
625 }
626
627 SvGETMAGIC(service)((void)(__builtin_expect(((((service)->sv_flags & 0x00200000
)) ? (_Bool)1 : (_Bool)0),(0)) && Perl_mg_get( service
)))
;
628 if(SvOK(service)((service)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
) {
629 servicename = SvPV_nomg(service, len)((((service)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((len = ((XPV*) (service)->sv_any)->xpv_cur), ((service
)->sv_u.svu_pv)) : Perl_sv_2pv_flags( service,&len,0))
;
630 if (!len)
631 servicename = NULL((void*)0);
632 }
633
634 Zero(&hints_s, sizeof(hints_s), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(hints_s)) || sizeof(char) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(sizeof(hints_s))))) ? (size_t)(sizeof(hints_s
)) : ((size_t)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char
))) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((void)0), (void)memset((char*)(&hints_s),0,(sizeof
(hints_s)) * sizeof(char)))
;
635 hints_s.ai_family = PF_UNSPEC0;
636
637 if(hints && SvOK(hints)((hints)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
) {
638 HV *hintshash;
639 SV **valp;
640
641 if(!SvROK(hints)((hints)->sv_flags & 0x00000800) || SvTYPE(SvRV(hints))((svtype)((((hints)->sv_u.svu_rv))->sv_flags & 0xff
))
!= SVt_PVHV)
642 croakPerl_croak("hints is not a HASH reference");
643
644 hintshash = (HV*)SvRV(hints)((hints)->sv_u.svu_rv);
645
646 if((valp = hv_fetch(hintshash, "flags", 5, 0)((SV**) Perl_hv_common_key_len( (hintshash),("flags"),(5),(0)
? (0x20 | 0x10) : 0x20,((void*)0),0))
) != NULL((void*)0) && SvOK(*valp)((*valp)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
647 hints_s.ai_flags = SvIV(*valp)((((*valp)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? ((XPVIV*) (*valp)->sv_any)->xiv_u.xivu_iv : Perl_sv_2iv_flags
( *valp,2))
;
648 if((valp = hv_fetch(hintshash, "family", 6, 0)((SV**) Perl_hv_common_key_len( (hintshash),("family"),(6),(0
) ? (0x20 | 0x10) : 0x20,((void*)0),0))
) != NULL((void*)0) && SvOK(*valp)((*valp)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
649 hints_s.ai_family = SvIV(*valp)((((*valp)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? ((XPVIV*) (*valp)->sv_any)->xiv_u.xivu_iv : Perl_sv_2iv_flags
( *valp,2))
;
650 if((valp = hv_fetch(hintshash, "socktype", 8, 0)((SV**) Perl_hv_common_key_len( (hintshash),("socktype"),(8),
(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
) != NULL((void*)0) && SvOK(*valp)((*valp)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
651 hints_s.ai_socktype = SvIV(*valp)((((*valp)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? ((XPVIV*) (*valp)->sv_any)->xiv_u.xivu_iv : Perl_sv_2iv_flags
( *valp,2))
;
652 if((valp = hv_fetch(hintshash, "protocol", 8, 0)((SV**) Perl_hv_common_key_len( (hintshash),("protocol"),(8),
(0) ? (0x20 | 0x10) : 0x20,((void*)0),0))
) != NULL((void*)0) && SvOK(*valp)((*valp)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
653 hints_s.ai_protocol = SvIV(*valp)((((*valp)->sv_flags & (0x00000100|0x00200000)) == 0x00000100
) ? ((XPVIV*) (*valp)->sv_any)->xiv_u.xivu_iv : Perl_sv_2iv_flags
( *valp,2))
;
654 }
655
656 err = getaddrinfo(hostname, servicename, &hints_s, &res);
657
658 XPUSHs(err_to_SV(aTHX_ err))do { do { (void)0; if (__builtin_expect(((((1) < 0 || PL_stack_max
- (sp) < (1))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(1) > sizeof(ssize_t) && ((ssize_t)
(1) != (1)) ? -1 : (1))); ((void)sizeof(sp)); } } while (0); *
++sp = (err_to_SV( err)); } while (0)
;
659
660 if(err)
661 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
662
663 n_res = 0;
664 for(res_iter = res; res_iter; res_iter = res_iter->ai_next) {
665 HV *res_hv = newHV()((HV *)({ void *_p = (Perl_newSV_type( SVt_PVHV)); _p; }));
666
667 (void)hv_stores(res_hv, "family", newSViv(res_iter->ai_family))((SV**) Perl_hv_common_key_len( ((res_hv)),(("" "family" ""))
,((sizeof("family")-1)),(0x04|0x20),((Perl_newSViv( res_iter->
ai_family))),(0)))
;
668 (void)hv_stores(res_hv, "socktype", newSViv(res_iter->ai_socktype))((SV**) Perl_hv_common_key_len( ((res_hv)),(("" "socktype" ""
)),((sizeof("socktype")-1)),(0x04|0x20),((Perl_newSViv( res_iter
->ai_socktype))),(0)))
;
669 (void)hv_stores(res_hv, "protocol", newSViv(res_iter->ai_protocol))((SV**) Perl_hv_common_key_len( ((res_hv)),(("" "protocol" ""
)),((sizeof("protocol")-1)),(0x04|0x20),((Perl_newSViv( res_iter
->ai_protocol))),(0)))
;
670
671 (void)hv_stores(res_hv, "addr", newSVpvn((char*)res_iter->ai_addr, res_iter->ai_addrlen))((SV**) Perl_hv_common_key_len( ((res_hv)),(("" "addr" "")),(
(sizeof("addr")-1)),(0x04|0x20),((Perl_newSVpvn( (char*)res_iter
->ai_addr,res_iter->ai_addrlen))),(0)))
;
672
673 if(res_iter->ai_canonname)
674 (void)hv_stores(res_hv, "canonname", newSVpv(res_iter->ai_canonname, 0))((SV**) Perl_hv_common_key_len( ((res_hv)),(("" "canonname" ""
)),((sizeof("canonname")-1)),(0x04|0x20),((Perl_newSVpv( res_iter
->ai_canonname,0))),(0)))
;
675 else
676 (void)hv_stores(res_hv, "canonname", newSV(0))((SV**) Perl_hv_common_key_len( ((res_hv)),(("" "canonname" ""
)),((sizeof("canonname")-1)),(0x04|0x20),((Perl_newSV( 0))),(
0)))
;
677
678 XPUSHs(sv_2mortal(newRV_noinc((SV*)res_hv)))do { do { (void)0; if (__builtin_expect(((((1) < 0 || PL_stack_max
- (sp) < (1))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(1) > sizeof(ssize_t) && ((ssize_t)
(1) != (1)) ? -1 : (1))); ((void)sizeof(sp)); } } while (0); *
++sp = (Perl_sv_2mortal( Perl_newRV_noinc( (SV*)res_hv))); } while
(0)
;
679 n_res++;
680 }
681
682 freeaddrinfo(res);
683
684 XSRETURN(1 + n_res)do { const IV tmpXSoff = (1 + n_res); ((void)0); PL_stack_sp =
PL_stack_base + ax + (tmpXSoff - 1); return; } while (0)
;
685}
686#endif
687
688#ifdef HAS_GETNAMEINFO
689static void xs_getnameinfo(pTHX_ CV *cv)
690{
691 dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
692
693 SV *addr;
694 int flags;
695 int xflags;
696
697 char host[1024];
698 char serv[256];
699 char *sa; /* we'll cast to struct sockaddr * when necessary */
700 STRLEN addr_len;
701 int err;
702
703 int want_host, want_serv;
704
705 PERL_UNUSED_ARG(cv)((void)sizeof(cv));
706 if(items < 1 || items > 3)
707 croakPerl_croak("Usage: Socket::getnameinfo(addr, flags=0, xflags=0)");
708
709 SPsp -= items;
710
711 addr = ST(0)PL_stack_base[ax + (0)];
712 SvGETMAGIC(addr)((void)(__builtin_expect(((((addr)->sv_flags & 0x00200000
)) ? (_Bool)1 : (_Bool)0),(0)) && Perl_mg_get( addr))
)
;
713
714 if(items < 2)
715 flags = 0;
716 else
717 flags = SvIV(ST(1))((((PL_stack_base[ax + (1)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (1)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
1)],2))
;
718
719 if(items < 3)
720 xflags = 0;
721 else
722 xflags = SvIV(ST(2))((((PL_stack_base[ax + (2)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (2)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
2)],2))
;
723
724 want_host = !(xflags & NIx_NOHOST(1 << 0));
725 want_serv = !(xflags & NIx_NOSERV(1 << 1));
726
727 if(!SvPOKp(addr)((addr)->sv_flags & 0x00004000))
728 croakPerl_croak("addr is not a string");
729
730 addr_len = SvCUR(addr)((XPV*) (addr)->sv_any)->xpv_cur;
731
732 /* We need to ensure the sockaddr is aligned, because a random SvPV might
733 * not be due to SvOOK */
734 Newx(sa, addr_len, char)(sa = ((void)(__builtin_expect(((((( sizeof(size_t) < sizeof
(addr_len) || sizeof(char) > ((size_t)1 << 8*(sizeof
(size_t) - sizeof(addr_len)))) ? (size_t)(addr_len) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
char*)(Perl_safesysmalloc((size_t)((addr_len)*sizeof(char))))
))
;
735 Copy(SvPV_nolen(addr), sa, addr_len, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(addr_len
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(addr_len)))) ? (size_t)(addr_len) : ((size_t)-1)/sizeof
(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)
0),(0)) && (Perl_croak_memory_wrap(),0)), ((void)0), (
(void)0), (void)memcpy((char*)(sa),(const char*)(((((addr)->
sv_flags & (0x00000400|0x00200000)) == 0x00000400) ? ((addr
)->sv_u.svu_pv) : Perl_sv_2pv_flags( addr,0,2))), (addr_len
) * sizeof(char)))
;
736#ifdef HAS_SOCKADDR_SA_LEN
737 ((struct sockaddr *)sa)->sa_len = addr_len;
738#endif
739
740 err = getnameinfo((struct sockaddr *)sa, addr_len,
741 want_host ? host : NULL((void*)0), want_host ? sizeof(host) : 0,
742 want_serv ? serv : NULL((void*)0), want_serv ? sizeof(serv) : 0,
743 flags);
744
745 Safefree(sa)Perl_safesysfree(((void *)(sa)));
746
747 XPUSHs(err_to_SV(aTHX_ err))do { do { (void)0; if (__builtin_expect(((((1) < 0 || PL_stack_max
- (sp) < (1))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(1) > sizeof(ssize_t) && ((ssize_t)
(1) != (1)) ? -1 : (1))); ((void)sizeof(sp)); } } while (0); *
++sp = (err_to_SV( err)); } while (0)
;
748
749 if(err)
750 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
751
752 XPUSHs(want_host ? sv_2mortal(newSVpv(host, 0)) : &PL_sv_undef)do { do { (void)0; if (__builtin_expect(((((1) < 0 || PL_stack_max
- (sp) < (1))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(1) > sizeof(ssize_t) && ((ssize_t)
(1) != (1)) ? -1 : (1))); ((void)sizeof(sp)); } } while (0); *
++sp = (want_host ? Perl_sv_2mortal( Perl_newSVpv( host,0)) :
&(PL_sv_immortals[1])); } while (0)
;
753 XPUSHs(want_serv ? sv_2mortal(newSVpv(serv, 0)) : &PL_sv_undef)do { do { (void)0; if (__builtin_expect(((((1) < 0 || PL_stack_max
- (sp) < (1))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(1) > sizeof(ssize_t) && ((ssize_t)
(1) != (1)) ? -1 : (1))); ((void)sizeof(sp)); } } while (0); *
++sp = (want_serv ? Perl_sv_2mortal( Perl_newSVpv( serv,0)) :
&(PL_sv_immortals[1])); } while (0)
;
754
755 XSRETURN(3)do { const IV tmpXSoff = (3); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
756}
757#endif
758
759#line 760 "Socket.c"
760#ifndef PERL_UNUSED_VAR
761# define PERL_UNUSED_VAR(var)((void)sizeof(var)) if (0) var = var
762#endif
763
764#ifndef dVARstruct Perl___notused_struct
765# define dVARstruct Perl___notused_struct dNOOPstruct Perl___notused_struct
766#endif
767
768
769/* This stuff is not part of the API! You have been warned. */
770#ifndef PERL_VERSION_DECIMAL
771# define PERL_VERSION_DECIMAL(r,v,s)(r*1000000 + v*1000 + s) (r*1000000 + v*1000 + s)
772#endif
773#ifndef PERL_DECIMAL_VERSION(5*1000000 + 32*1000 + 1)
774# define PERL_DECIMAL_VERSION(5*1000000 + 32*1000 + 1) \
775 PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)(5*1000000 + 32*1000 + 1)
776#endif
777#ifndef PERL_VERSION_GE
778# define PERL_VERSION_GE(r,v,s)((5*1000000 + 32*1000 + 1) >= (r*1000000 + v*1000 + s)) \
779 (PERL_DECIMAL_VERSION(5*1000000 + 32*1000 + 1) >= PERL_VERSION_DECIMAL(r,v,s)(r*1000000 + v*1000 + s))
780#endif
781#ifndef PERL_VERSION_LE
782# define PERL_VERSION_LE(r,v,s)((5*1000000 + 32*1000 + 1) <= (r*1000000 + v*1000 + s)) \
783 (PERL_DECIMAL_VERSION(5*1000000 + 32*1000 + 1) <= PERL_VERSION_DECIMAL(r,v,s)(r*1000000 + v*1000 + s))
784#endif
785
786/* XS_INTERNAL is the explicit static-linkage variant of the default
787 * XS macro.
788 *
789 * XS_EXTERNAL is the same as XS_INTERNAL except it does not include
790 * "STATIC", ie. it exports XSUB symbols. You probably don't want that
791 * for anything but the BOOT XSUB.
792 *
793 * See XSUB.h in core!
794 */
795
796
797/* TODO: This might be compatible further back than 5.10.0. */
798#if PERL_VERSION_GE(5, 10, 0)((5*1000000 + 32*1000 + 1) >= (5*1000000 + 10*1000 + 0)) && PERL_VERSION_LE(5, 15, 1)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 15*1000 + 1))
799# undef XS_EXTERNAL
800# undef XS_INTERNAL
801# if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
802# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) __declspec(dllexport) XSPROTO(name)void name( CV* cv __attribute__((unused)))
803# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) STATICstatic XSPROTO(name)void name( CV* cv __attribute__((unused)))
804# endif
805# if defined(__SYMBIAN32__)
806# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) EXPORT_C XSPROTO(name)void name( CV* cv __attribute__((unused)))
807# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) EXPORT_C STATICstatic XSPROTO(name)void name( CV* cv __attribute__((unused)))
808# endif
809# ifndef XS_EXTERNAL
810# if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus)
811# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) void name(pTHX_ CV* cv __attribute__unused____attribute__((unused)))
812# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) STATICstatic void name(pTHX_ CV* cv __attribute__unused____attribute__((unused)))
813# else
814# ifdef __cplusplus
815# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) extern "C" XSPROTO(name)void name( CV* cv __attribute__((unused)))
816# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) static XSPROTO(name)void name( CV* cv __attribute__((unused)))
817# else
818# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) XSPROTO(name)void name( CV* cv __attribute__((unused)))
819# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) STATICstatic XSPROTO(name)void name( CV* cv __attribute__((unused)))
820# endif
821# endif
822# endif
823#endif
824
825/* perl >= 5.10.0 && perl <= 5.15.1 */
826
827
828/* The XS_EXTERNAL macro is used for functions that must not be static
829 * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL
830 * macro defined, the best we can do is assume XS is the same.
831 * Dito for XS_INTERNAL.
832 */
833#ifndef XS_EXTERNAL
834# define XS_EXTERNAL(name)void name( CV* cv __attribute__((unused))) XS(name)void name( CV* cv __attribute__((unused)))
835#endif
836#ifndef XS_INTERNAL
837# define XS_INTERNAL(name)static void name( CV* cv __attribute__((unused))) XS(name)void name( CV* cv __attribute__((unused)))
838#endif
839
840/* Now, finally, after all this mess, we want an ExtUtils::ParseXS
841 * internal macro that we're free to redefine for varying linkage due
842 * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use
843 * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to!
844 */
845
846#undef XS_EUPXS
847#if defined(PERL_EUPXS_ALWAYS_EXPORT)
848# define XS_EUPXS(name)static void name( CV* cv __attribute__((unused))) XS_EXTERNAL(name)void name( CV* cv __attribute__((unused)))
849#else
850 /* default to internal */
851# define XS_EUPXS(name)static void name( CV* cv __attribute__((unused))) XS_INTERNAL(name)static void name( CV* cv __attribute__((unused)))
852#endif
853
854#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE((void)0); ((void)0)
855#define PERL_ARGS_ASSERT_CROAK_XS_USAGE((void)0); ((void)0) assert(cv)((void)0); assert(params)((void)0)
856
857/* prototype to pass -Wmissing-prototypes */
858STATICstatic void
859S_croak_xs_usage(const CV *const cv, const char *const params);
860
861STATICstatic void
862S_croak_xs_usage(const CV *const cv, const char *const params)
863{
864 const GV *const gv = CvGV(cv)Perl_CvGV( (CV *)(cv));
865
866 PERL_ARGS_ASSERT_CROAK_XS_USAGE((void)0); ((void)0);
867
868 if (gv) {
869 const char *const gvname = GvNAME(gv)((((XPVGV*)(gv)->sv_any)->xiv_u.xivu_namehek))->hek_key;
870 const HV *const stash = GvSTASH(gv)(((XPVGV*)(gv)->sv_any)->xnv_u.xgv_stash);
871 const char *const hvname = stash ? HvNAME(stash)((((stash)->sv_flags & 0x02000000) && ((struct
xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV*) (stash
)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_name &&
( ((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_count ? *
((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_names
: ((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_name
)) ? (( ((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash
)[((XPVHV*) (stash)->sv_any)->xhv_max+1]))->xhv_name_count
? *((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_names
: ((struct xpvhv_aux*)&(((stash)->sv_u.svu_hash)[((XPVHV
*) (stash)->sv_any)->xhv_max+1]))->xhv_name_u.xhvnameu_name
))->hek_key : ((void*)0))
: NULL((void*)0);
872
873 if (hvname)
874 Perl_croak_nocontextPerl_croak("Usage: %s::%s(%s)", hvname, gvname, params);
875 else
876 Perl_croak_nocontextPerl_croak("Usage: %s(%s)", gvname, params);
877 } else {
878 /* Pants. I don't think that it should be possible to get here. */
879 Perl_croak_nocontextPerl_croak("Usage: CODE(0x%" UVxf"lx" ")(%s)", PTR2UV(cv)(UV)(cv), params);
880 }
881}
882#undef PERL_ARGS_ASSERT_CROAK_XS_USAGE((void)0); ((void)0)
883
884#define croak_xs_usagePerl_croak_xs_usage S_croak_xs_usage
885
886#endif
887
888/* NOTE: the prototype of newXSproto() is different in versions of perls,
889 * so we define a portable version of newXSproto()
890 */
891#ifdef newXS_flags
892#define newXSproto_portable(name, c_impl, file, proto)Perl_newXS_flags( name,c_impl,file,proto,0) newXS_flags(name, c_impl, file, proto, 0)Perl_newXS_flags( name,c_impl,file,proto,0)
893#else
894#define newXSproto_portable(name, c_impl, file, proto)Perl_newXS_flags( name,c_impl,file,proto,0) (PL_Sv=(SV*)newXS(name, c_impl, file)Perl_newXS( name,c_impl,file), sv_setpv(PL_Sv, proto)Perl_sv_setpv( PL_Sv,proto), (CV*)PL_Sv)
895#endif /* !defined(newXS_flags) */
896
897#if PERL_VERSION_LE(5, 21, 5)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 21*1000 + 5))
898# define newXS_deffile(a,b)Perl_newXS_deffile( a,b) Perl_newXS(aTHX_ a,b,file)
899#else
900# define newXS_deffile(a,b)Perl_newXS_deffile( a,b) Perl_newXS_deffile(aTHX_ a,b)
901#endif
902
903#line 904 "Socket.c"
904
905/* INCLUDE: Including 'const-xs.inc' from 'Socket.xs' */
906
907
908XS_EUPXS(XS_Socket_AUTOLOAD)static void XS_Socket_AUTOLOAD( CV* cv __attribute__((unused)
))
; /* prototype to pass -Wmissing-prototypes */
909XS_EUPXS(XS_Socket_AUTOLOAD)static void XS_Socket_AUTOLOAD( CV* cv __attribute__((unused)
))
910{
911 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
912 if (items != 0)
913 croak_xs_usagePerl_croak_xs_usage(cv, "");
914 PERL_UNUSED_VAR(ax)((void)sizeof(ax)); /* -Wall */
915 SPsp -= items;
916 {
917#line 1010 "./const-xs.inc"
918 SV *sv = newSVpvn_flags(SvPVX(cv), SvCUR(cv), SVs_TEMP | SvUTF8(cv))Perl_newSVpvn_flags( ((cv)->sv_u.svu_pv),((XPV*) (cv)->
sv_any)->xpv_cur,0x00080000 | ((cv)->sv_flags & 0x20000000
))
;
919 const COP *cop = PL_curcop;
920#line 921 "Socket.c"
921#line 1013 "./const-xs.inc"
922#ifndef SYMBIAN
923 /* It's not obvious how to calculate this at C pre-processor time.
924 However, any compiler optimiser worth its salt should be able to
925 remove the dead code, and hopefully the now-obviously-unused static
926 function too. */
927 HV *constant_missing = (C_ARRAY_LENGTH(values_for_notfound)(sizeof(values_for_notfound)/sizeof((values_for_notfound)[0])
)
> 1)
928 ? get_missing_hash(aTHX) : NULL((void*)0);
929 if ((C_ARRAY_LENGTH(values_for_notfound)(sizeof(values_for_notfound)/sizeof((values_for_notfound)[0])
)
> 1)
930 ? hv_exists_ent(constant_missing, sv, 0)((Perl_hv_common( (constant_missing),(sv),((void*)0),0,0,0x08
,0,(0))) ? (_Bool)1 : (_Bool)0)
: 0) {
931 sv = newSVpvfPerl_newSVpvf("Your vendor has not defined Socket macro %" SVf"-p"
932 ", used at %" COP_FILE_F"-p" " line %" UVuf"lu" "\n",
933 sv, COP_FILE(cop)(((cop)->cop_filegv) ? ((0+(((cop)->cop_filegv))->sv_u
.svu_gp)->gp_sv) : ((void*)0))
, (UV)CopLINE(cop)((cop)->cop_line));
934 } else
935#endif
936 {
937 sv = newSVpvfPerl_newSVpvf("%" SVf"-p"
938 " is not a valid Socket macro at %"
939 COP_FILE_F"-p" " line %" UVuf"lu" "\n",
940 sv, COP_FILE(cop)(((cop)->cop_filegv) ? ((0+(((cop)->cop_filegv))->sv_u
.svu_gp)->gp_sv) : ((void*)0))
, (UV)CopLINE(cop)((cop)->cop_line));
941 }
942 croak_sv(sv_2mortal(sv))Perl_croak_sv( Perl_sv_2mortal( sv));
943#line 944 "Socket.c"
944 PUTBACKPL_stack_sp = sp;
945 return;
946 }
947}
948
949
950/* INCLUDE: Returning to 'Socket.xs' from 'const-xs.inc' */
951
952
953XS_EUPXS(XS_Socket_inet_aton)static void XS_Socket_inet_aton( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
954XS_EUPXS(XS_Socket_inet_aton)static void XS_Socket_inet_aton( CV* cv __attribute__((unused
)))
955{
956 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
957 if (items != 1)
958 croak_xs_usagePerl_croak_xs_usage(cv, "host");
959 {
960 char * host = (char *)SvPV_nolen(ST(0))((((PL_stack_base[ax + (0)])->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((PL_stack_base[ax + (0)])->sv_u.svu_pv
) : Perl_sv_2pv_flags( PL_stack_base[ax + (0)],0,2))
961;
962#line 766 "Socket.xs"
963 {
964 struct in_addr ip_address;
965 struct hostent * phe;
966
967 if ((*host != '\0') && inet_aton(host, &ip_address)) {
968 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn((char *)&ip_address, sizeof(ip_address)))Perl_sv_2mortal( Perl_newSVpvn( (char *)&ip_address,sizeof
(ip_address)))
;
969 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
970 }
971#ifdef HAS_GETHOSTBYNAME
972 phe = gethostbyname(host);
973 if (phe && phe->h_addrtype == AF_INET2 && phe->h_length == 4) {
974 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn((char *)phe->h_addr, phe->h_length))Perl_sv_2mortal( Perl_newSVpvn( (char *)phe->h_addr_list[0
],phe->h_length))
;
975 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
976 }
977#endif
978 XSRETURN_UNDEFdo { (PL_stack_base[ax + (0)] = &(PL_sv_immortals[1])); do
{ const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0); } while (0)
;
979 }
980#line 981 "Socket.c"
981 }
982 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
983}
984
985
986XS_EUPXS(XS_Socket_inet_ntoa)static void XS_Socket_inet_ntoa( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
987XS_EUPXS(XS_Socket_inet_ntoa)static void XS_Socket_inet_ntoa( CV* cv __attribute__((unused
)))
988{
989 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
990 if (items != 1)
991 croak_xs_usagePerl_croak_xs_usage(cv, "ip_address_sv");
992 {
993 SV * ip_address_sv = ST(0)PL_stack_base[ax + (0)]
994;
995#line 788 "Socket.xs"
996 {
997 STRLEN addrlen;
998 struct in_addr addr;
999 char * ip_address;
1000 if (DO_UTF8(ip_address_sv)(((ip_address_sv)->sv_flags & 0x20000000) && !
__builtin_expect(((((PL_curcop)->cop_hints + 0) & 0x00000008
) ? (_Bool)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(ip_address_sv, 1)Perl_sv_utf8_downgrade_flags( ip_address_sv,1,2))
1001 croakPerl_croak("Wide character in %s", "Socket::inet_ntoa");
1002 ip_address = SvPVbyte(ip_address_sv, addrlen)((((ip_address_sv)->sv_flags & (0x00000400|0x20000000|
0x00200000)) == 0x00000400) ? ((addrlen = ((XPV*) (ip_address_sv
)->sv_any)->xpv_cur), ((ip_address_sv)->sv_u.svu_pv)
) : Perl_sv_2pvbyte_flags( ip_address_sv,&addrlen,2))
;
1003 if (addrlen == sizeof(addr) || addrlen == 4)
1004 addr.s_addr =
1005 (ip_address[0] & 0xFF) << 24 |
1006 (ip_address[1] & 0xFF) << 16 |
1007 (ip_address[2] & 0xFF) << 8 |
1008 (ip_address[3] & 0xFF);
1009 else
1010 croakPerl_croak("Bad arg length for %s, length is %" UVuf"lu"
1011 ", should be %" UVuf"lu",
1012 "Socket::inet_ntoa", (UV)addrlen, (UV)sizeof(addr));
1013 /* We could use inet_ntoa() but that is broken
1014 * in HP-UX + GCC + 64bitint (returns "0.0.0.0"),
1015 * so let's use this sprintf() workaround everywhere.
1016 * This is also more threadsafe than using inet_ntoa(). */
1017 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(Perl_newSVpvf(aTHX_ "%d.%d.%d.%d", /* IPv6? */Perl_sv_2mortal( Perl_newSVpvf( "%d.%d.%d.%d", (int)((addr.s_addr
>> 24) & 0xFF), (int)((addr.s_addr >> 16) &
0xFF), (int)((addr.s_addr >> 8) & 0xFF), (int)( addr
.s_addr & 0xFF)))
1018 (int)((addr.s_addr >> 24) & 0xFF),Perl_sv_2mortal( Perl_newSVpvf( "%d.%d.%d.%d", (int)((addr.s_addr
>> 24) & 0xFF), (int)((addr.s_addr >> 16) &
0xFF), (int)((addr.s_addr >> 8) & 0xFF), (int)( addr
.s_addr & 0xFF)))
1019 (int)((addr.s_addr >> 16) & 0xFF),Perl_sv_2mortal( Perl_newSVpvf( "%d.%d.%d.%d", (int)((addr.s_addr
>> 24) & 0xFF), (int)((addr.s_addr >> 16) &
0xFF), (int)((addr.s_addr >> 8) & 0xFF), (int)( addr
.s_addr & 0xFF)))
1020 (int)((addr.s_addr >> 8) & 0xFF),Perl_sv_2mortal( Perl_newSVpvf( "%d.%d.%d.%d", (int)((addr.s_addr
>> 24) & 0xFF), (int)((addr.s_addr >> 16) &
0xFF), (int)((addr.s_addr >> 8) & 0xFF), (int)( addr
.s_addr & 0xFF)))
1021 (int)( addr.s_addr & 0xFF)))Perl_sv_2mortal( Perl_newSVpvf( "%d.%d.%d.%d", (int)((addr.s_addr
>> 24) & 0xFF), (int)((addr.s_addr >> 16) &
0xFF), (int)((addr.s_addr >> 8) & 0xFF), (int)( addr
.s_addr & 0xFF)))
;
1022 }
1023#line 1024 "Socket.c"
1024 }
1025 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1026}
1027
1028
1029XS_EUPXS(XS_Socket_sockaddr_family)static void XS_Socket_sockaddr_family( CV* cv __attribute__((
unused)))
; /* prototype to pass -Wmissing-prototypes */
1030XS_EUPXS(XS_Socket_sockaddr_family)static void XS_Socket_sockaddr_family( CV* cv __attribute__((
unused)))
1031{
1032 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1033 if (items != 1)
1034 croak_xs_usagePerl_croak_xs_usage(cv, "sockaddr");
1035 {
1036 SV * sockaddr = ST(0)PL_stack_base[ax + (0)]
1037;
1038#line 820 "Socket.xs"
1039 STRLEN sockaddr_len;
1040 char *sockaddr_pv = SvPVbyte(sockaddr, sockaddr_len)((((sockaddr)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((sockaddr_len = ((XPV*) (sockaddr)->sv_any
)->xpv_cur), ((sockaddr)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( sockaddr,&sockaddr_len,2))
;
1041#line 1042 "Socket.c"
1042#line 823 "Socket.xs"
1043 if (sockaddr_len < STRUCT_OFFSET(struct sockaddr, sa_data)__builtin_offsetof(struct sockaddr, sa_data))
1044 croakPerl_croak("Bad arg length for %s, length is %" UVuf"lu"
1045 ", should be at least %" UVuf"lu",
1046 "Socket::sockaddr_family", (UV)sockaddr_len,
1047 (UV)STRUCT_OFFSET(struct sockaddr, sa_data)__builtin_offsetof(struct sockaddr, sa_data));
1048 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSViv(((struct sockaddr*)sockaddr_pv)->sa_family))Perl_sv_2mortal( Perl_newSViv( ((struct sockaddr*)sockaddr_pv
)->sa_family))
;
1049#line 1050 "Socket.c"
1050 }
1051 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1052}
1053
1054
1055XS_EUPXS(XS_Socket_pack_sockaddr_un)static void XS_Socket_pack_sockaddr_un( CV* cv __attribute__(
(unused)))
; /* prototype to pass -Wmissing-prototypes */
1056XS_EUPXS(XS_Socket_pack_sockaddr_un)static void XS_Socket_pack_sockaddr_un( CV* cv __attribute__(
(unused)))
1057{
1058 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1059 if (items != 1)
1060 croak_xs_usagePerl_croak_xs_usage(cv, "pathname");
1061 {
1062 SV * pathname = ST(0)PL_stack_base[ax + (0)]
1063;
1064#line 834 "Socket.xs"
1065 {
1066#if defined(I_SYS_UN) || defined(WIN32)
1067 struct sockaddr_un sun_ad; /* fear using sun */
1068 STRLEN len;
1069 char * pathname_pv;
1070 int addr_len;
1071
1072 if (!SvOK(pathname)((pathname)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
1073 croakPerl_croak("Undefined path for %s", "Socket::pack_sockaddr_un");
1074
1075 Zero(&sun_ad, sizeof(sun_ad), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(sun_ad)) || sizeof(char) > ((size_t)1 << 8*(sizeof(
size_t) - sizeof(sizeof(sun_ad))))) ? (size_t)(sizeof(sun_ad)
) : ((size_t)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char)
)) ? (_Bool)1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap
(),0)), ((void)0), (void)memset((char*)(&sun_ad),0,(sizeof
(sun_ad)) * sizeof(char)))
;
1076 sun_ad.sun_family = AF_UNIX1;
1077 pathname_pv = SvPV(pathname,len)((((pathname)->sv_flags & (0x00000400|0x00200000)) == 0x00000400
) ? ((len = ((XPV*) (pathname)->sv_any)->xpv_cur), ((pathname
)->sv_u.svu_pv)) : Perl_sv_2pv_flags( pathname,&len,2)
)
;
1078 if (len > sizeof(sun_ad.sun_path)) {
1079 warnPerl_warn("Path length (%" UVuf"lu" ") is longer than maximum supported length"
1080 " (%" UVuf"lu" ") and will be truncated",
1081 (UV)len, (UV)sizeof(sun_ad.sun_path));
1082 len = sizeof(sun_ad.sun_path);
1083 }
1084# ifdef OS2 /* Name should start with \socket\ and contain backslashes! */
1085 {
1086 int off;
1087 char *s, *e;
1088
1089 if (pathname_pv[0] != '/' && pathname_pv[0] != '\\')
1090 croakPerl_croak("Relative UNIX domain socket name '%s' unsupported",
1091 pathname_pv);
1092 else if (len < 8
1093 || pathname_pv[7] != '/' && pathname_pv[7] != '\\'
1094 || !strnicmp(pathname_pv + 1, "socket", 6))
1095 off = 7;
1096 else
1097 off = 0; /* Preserve names starting with \socket\ */
1098 Copy("\\socket", sun_ad.sun_path, off, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(off
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(off)))) ? (size_t)(off) : ((size_t)-1)/sizeof(char)) >
((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((void)0), ((void)0), (void)memcpy
((char*)(sun_ad.sun_path),(const char*)("\\socket"), (off) * sizeof
(char)))
;
1099 Copy(pathname_pv, sun_ad.sun_path + off, len, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(len
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(len)))) ? (size_t)(len) : ((size_t)-1)/sizeof(char)) >
((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((void)0), ((void)0), (void)memcpy
((char*)(sun_ad.sun_path + off),(const char*)(pathname_pv), (
len) * sizeof(char)))
;
1100
1101 s = sun_ad.sun_path + off - 1;
1102 e = s + len + 1;
1103 while (++s < e)
1104 if (*s = '/')
1105 *s = '\\';
1106 }
1107# else /* !( defined OS2 ) */
1108 Copy(pathname_pv, sun_ad.sun_path, len, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(len
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(len)))) ? (size_t)(len) : ((size_t)-1)/sizeof(char)) >
((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((void)0), ((void)0), (void)memcpy
((char*)(sun_ad.sun_path),(const char*)(pathname_pv), (len) *
sizeof(char)))
;
1109# endif
1110 if (0) not_here("dummy");
1111 if (len > 1 && sun_ad.sun_path[0] == '\0') {
1112 /* Linux-style abstract-namespace socket.
1113 * The name is not a file name, but an array of arbitrary
1114 * character, starting with \0 and possibly including \0s,
1115 * therefore the length of the structure must denote the
1116 * end of that character array */
1117 addr_len = (char *)&(sun_ad.sun_path) - (char *)&sun_ad + len;
1118 } else {
1119 addr_len = sizeof(sun_ad);
1120 }
1121# ifdef HAS_SOCKADDR_SA_LEN
1122 sun_ad.sun_len = addr_len;
1123# endif
1124 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn((char *)&sun_ad, addr_len))Perl_sv_2mortal( Perl_newSVpvn( (char *)&sun_ad,addr_len)
)
;
1125#else
1126 ST(0)PL_stack_base[ax + (0)] = (SV*)not_here("pack_sockaddr_un");
1127#endif
1128
1129 }
1130#line 1131 "Socket.c"
1131 }
1132 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1133}
1134
1135
1136XS_EUPXS(XS_Socket_unpack_sockaddr_un)static void XS_Socket_unpack_sockaddr_un( CV* cv __attribute__
((unused)))
; /* prototype to pass -Wmissing-prototypes */
1137XS_EUPXS(XS_Socket_unpack_sockaddr_un)static void XS_Socket_unpack_sockaddr_un( CV* cv __attribute__
((unused)))
1138{
1139 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1140 if (items != 1)
1141 croak_xs_usagePerl_croak_xs_usage(cv, "sun_sv");
1142 {
1143 SV * sun_sv = ST(0)PL_stack_base[ax + (0)]
1144;
1145#line 904 "Socket.xs"
1146 {
1147#if defined(I_SYS_UN) || defined(WIN32)
1148 struct sockaddr_un addr;
1149 STRLEN sockaddrlen;
1150 char * sun_ad;
1151 int addr_len = 0;
1152 if (!SvOK(sun_sv)((sun_sv)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
1153 croakPerl_croak("Undefined address for %s", "Socket::unpack_sockaddr_un");
1154 sun_ad = SvPVbyte(sun_sv,sockaddrlen)((((sun_sv)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((sockaddrlen = ((XPV*) (sun_sv)->sv_any
)->xpv_cur), ((sun_sv)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( sun_sv,&sockaddrlen,2))
;
1155# if defined(__linux__) || defined(HAS_SOCKADDR_SA_LEN)
1156 /* On Linux or *BSD sockaddrlen on sockets returned by accept, recvfrom,
1157 getpeername and getsockname is not equal to sizeof(addr). */
1158 if (sockaddrlen < sizeof(addr)) {
1159 Copy(sun_ad, &addr, sockaddrlen, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sockaddrlen
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(sockaddrlen)))) ? (size_t)(sockaddrlen) : ((size_t)-1
)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 :
(_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), ((void
)0), ((void)0), (void)memcpy((char*)(&addr),(const char*)
(sun_ad), (sockaddrlen) * sizeof(char)))
;
1160 Zero(((char*)&addr) + sockaddrlen, sizeof(addr) - sockaddrlen, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(addr) - sockaddrlen) || sizeof(char) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(sizeof(addr) - sockaddrlen)))) ? (
size_t)(sizeof(addr) - sockaddrlen) : ((size_t)-1)/sizeof(char
)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), ((void)0), (void
)memset((char*)(((char*)&addr) + sockaddrlen),0,(sizeof(addr
) - sockaddrlen) * sizeof(char)))
;
1161 } else {
1162 Copy(sun_ad, &addr, sizeof(addr), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(addr)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(addr))))) ? (size_t)(sizeof(addr)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), ((void)0), (void)memcpy((char*)(&addr),(const char
*)(sun_ad), (sizeof(addr)) * sizeof(char)))
;
1163 }
1164# ifdef HAS_SOCKADDR_SA_LEN
1165 /* In this case, sun_len must be checked */
1166 if (sockaddrlen != addr.sun_len)
1167 croakPerl_croak("Invalid arg sun_len field for %s, length is %" UVuf"lu"
1168 ", but sun_len is %" UVuf"lu",
1169 "Socket::unpack_sockaddr_un", (UV)sockaddrlen, (UV)addr.sun_len);
1170# endif
1171# else
1172 if (sockaddrlen != sizeof(addr))
1173 croakPerl_croak("Bad arg length for %s, length is %" UVuf"lu"
1174 ", should be %" UVuf"lu",
1175 "Socket::unpack_sockaddr_un", (UV)sockaddrlen, (UV)sizeof(addr));
1176 Copy(sun_ad, &addr, sizeof(addr), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(addr)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(addr))))) ? (size_t)(sizeof(addr)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), ((void)0), (void)memcpy((char*)(&addr),(const char
*)(sun_ad), (sizeof(addr)) * sizeof(char)))
;
1177# endif
1178
1179 if (addr.sun_family != AF_UNIX1)
1180 croakPerl_croak("Bad address family for %s, got %d, should be %d",
1181 "Socket::unpack_sockaddr_un", addr.sun_family, AF_UNIX1);
1182# ifdef __linux__
1183 if (addr.sun_path[0] == '\0') {
1184 /* Linux-style abstract socket address begins with a nul
1185 * and can contain nuls. */
1186 addr_len = (char *)&addr - (char *)&(addr.sun_path) + sockaddrlen;
1187 } else
1188# endif
1189 {
1190# if defined(HAS_SOCKADDR_SA_LEN)
1191 /* On *BSD sun_path not always ends with a '\0' */
1192 int maxlen = addr.sun_len - 2; /* should use STRUCT_OFFSET(struct sockaddr_un, sun_path) instead of 2 */
1193 if (maxlen > (int)sizeof(addr.sun_path))
1194 maxlen = (int)sizeof(addr.sun_path);
1195# else
1196 const int maxlen = (int)sizeof(addr.sun_path);
1197# endif
1198 while (addr_len < maxlen && addr.sun_path[addr_len])
1199 addr_len++;
1200 }
1201
1202 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn(addr.sun_path, addr_len))Perl_sv_2mortal( Perl_newSVpvn( addr.sun_path,addr_len));
1203#else
1204 ST(0)PL_stack_base[ax + (0)] = (SV*)not_here("unpack_sockaddr_un");
1205#endif
1206 }
1207#line 1208 "Socket.c"
1208 }
1209 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1210}
1211
1212
1213XS_EUPXS(XS_Socket_pack_sockaddr_in)static void XS_Socket_pack_sockaddr_in( CV* cv __attribute__(
(unused)))
; /* prototype to pass -Wmissing-prototypes */
1214XS_EUPXS(XS_Socket_pack_sockaddr_in)static void XS_Socket_pack_sockaddr_in( CV* cv __attribute__(
(unused)))
1215{
1216 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1217 if (items != 2)
1218 croak_xs_usagePerl_croak_xs_usage(cv, "port_sv, ip_address_sv");
1219 {
1220 SV * port_sv = ST(0)PL_stack_base[ax + (0)]
1221;
1222 SV * ip_address_sv = ST(1)PL_stack_base[ax + (1)]
1223;
1224#line 971 "Socket.xs"
1225 {
1226 struct sockaddr_in sin;
1227 struct in_addr addr;
1228 STRLEN addrlen;
1229 unsigned short port = 0;
1230 char * ip_address;
1231 if (SvOK(port_sv)((port_sv)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
1232 port = SvUV(port_sv)((((port_sv)->sv_flags & (0x00000100|0x80000000|0x00200000
)) == (0x00000100|0x80000000)) ? ((XPVUV*) (port_sv)->sv_any
)->xuv_u.xivu_uv : Perl_sv_2uv_flags( port_sv,2))
;
1233 if (!SvOK(ip_address_sv)((ip_address_sv)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
1234 croakPerl_croak("Undefined address for %s", "Socket::pack_sockaddr_in");
1235 if (DO_UTF8(ip_address_sv)(((ip_address_sv)->sv_flags & 0x20000000) && !
__builtin_expect(((((PL_curcop)->cop_hints + 0) & 0x00000008
) ? (_Bool)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(ip_address_sv, 1)Perl_sv_utf8_downgrade_flags( ip_address_sv,1,2))
1236 croakPerl_croak("Wide character in %s", "Socket::pack_sockaddr_in");
1237 ip_address = SvPVbyte(ip_address_sv, addrlen)((((ip_address_sv)->sv_flags & (0x00000400|0x20000000|
0x00200000)) == 0x00000400) ? ((addrlen = ((XPV*) (ip_address_sv
)->sv_any)->xpv_cur), ((ip_address_sv)->sv_u.svu_pv)
) : Perl_sv_2pvbyte_flags( ip_address_sv,&addrlen,2))
;
1238 if (addrlen == sizeof(addr) || addrlen == 4)
1239 addr.s_addr =
1240 (unsigned int)(ip_address[0] & 0xFF) << 24 |
1241 (unsigned int)(ip_address[1] & 0xFF) << 16 |
1242 (unsigned int)(ip_address[2] & 0xFF) << 8 |
1243 (unsigned int)(ip_address[3] & 0xFF);
1244 else
1245 croakPerl_croak("Bad arg length for %s, length is %" UVuf"lu"
1246 ", should be %" UVuf"lu",
1247 "Socket::pack_sockaddr_in",
1248 (UV)addrlen, (UV)sizeof(addr));
1249 Zero(&sin, sizeof(sin), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(sin)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(sin))))) ? (size_t)(sizeof(sin)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), (void)memset((char*)(&sin),0,(sizeof(sin)) * sizeof
(char)))
;
1250 sin.sin_family = AF_INET2;
1251 sin.sin_port = htons(port)(__uint16_t)(__builtin_constant_p(port) ? (__uint16_t)(((__uint16_t
)(port) & 0xffU) << 8 | ((__uint16_t)(port) & 0xff00U
) >> 8) : __swap16md(port))
;
1252 sin.sin_addr.s_addr = htonl(addr.s_addr)(__uint32_t)(__builtin_constant_p(addr.s_addr) ? (__uint32_t)
(((__uint32_t)(addr.s_addr) & 0xff) << 24 | ((__uint32_t
)(addr.s_addr) & 0xff00) << 8 | ((__uint32_t)(addr.
s_addr) & 0xff0000) >> 8 | ((__uint32_t)(addr.s_addr
) & 0xff000000) >> 24) : __swap32md(addr.s_addr))
;
1253# ifdef HAS_SOCKADDR_SA_LEN
1254 sin.sin_len = sizeof(sin);
1255# endif
1256 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn((char *)&sin, sizeof(sin)))Perl_sv_2mortal( Perl_newSVpvn( (char *)&sin,sizeof(sin))
)
;
1257 }
1258#line 1259 "Socket.c"
1259 }
1260 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1261}
1262
1263
1264XS_EUPXS(XS_Socket_unpack_sockaddr_in)static void XS_Socket_unpack_sockaddr_in( CV* cv __attribute__
((unused)))
; /* prototype to pass -Wmissing-prototypes */
1265XS_EUPXS(XS_Socket_unpack_sockaddr_in)static void XS_Socket_unpack_sockaddr_in( CV* cv __attribute__
((unused)))
1266{
1267 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1268 if (items != 1)
1269 croak_xs_usagePerl_croak_xs_usage(cv, "sin_sv");
1270 PERL_UNUSED_VAR(ax)((void)sizeof(ax)); /* -Wall */
1271 SPsp -= items;
1272 {
1273 SV * sin_sv = ST(0)PL_stack_base[ax + (0)]
1274;
1275#line 1009 "Socket.xs"
1276 {
1277 STRLEN sockaddrlen;
1278 struct sockaddr_in addr;
1279 SV *ip_address_sv;
1280 char * sin;
1281 if (!SvOK(sin_sv)((sin_sv)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
1282 croakPerl_croak("Undefined address for %s", "Socket::unpack_sockaddr_in");
1283 sin = SvPVbyte(sin_sv,sockaddrlen)((((sin_sv)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((sockaddrlen = ((XPV*) (sin_sv)->sv_any
)->xpv_cur), ((sin_sv)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( sin_sv,&sockaddrlen,2))
;
1284 if (sockaddrlen != sizeof(addr)) {
1285 croakPerl_croak("Bad arg length for %s, length is %" UVuf"lu"
1286 ", should be %" UVuf"lu",
1287 "Socket::unpack_sockaddr_in", (UV)sockaddrlen, (UV)sizeof(addr));
1288 }
1289 Copy(sin, &addr, sizeof(addr), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(addr)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(addr))))) ? (size_t)(sizeof(addr)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), ((void)0), (void)memcpy((char*)(&addr),(const char
*)(sin), (sizeof(addr)) * sizeof(char)))
;
1290 if (addr.sin_family != AF_INET2) {
1291 croakPerl_croak("Bad address family for %s, got %d, should be %d",
1292 "Socket::unpack_sockaddr_in", addr.sin_family, AF_INET2);
1293 }
1294 ip_address_sv = newSVpvn((char *)&addr.sin_addr, sizeof(addr.sin_addr))Perl_newSVpvn( (char *)&addr.sin_addr,sizeof(addr.sin_addr
))
;
1295
1296 if(GIMME_VPerl_gimme_V() == G_ARRAY3) {
1297 EXTEND(SP, 2)do { (void)0; if (__builtin_expect(((((2) < 0 || PL_stack_max
- (sp) < (2))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(2) > sizeof(ssize_t) && ((ssize_t)
(2) != (2)) ? -1 : (2))); ((void)sizeof(sp)); } } while (0)
;
1298 mPUSHi(ntohs(addr.sin_port))Perl_sv_setiv( (*++sp = (Perl_sv_newmortal())),(IV)((__uint16_t
)(__builtin_constant_p(addr.sin_port) ? (__uint16_t)(((__uint16_t
)(addr.sin_port) & 0xffU) << 8 | ((__uint16_t)(addr
.sin_port) & 0xff00U) >> 8) : __swap16md(addr.sin_port
))))
;
1299 mPUSHs(ip_address_sv)(*++sp = (Perl_sv_2mortal( ip_address_sv)));
1300 }
1301 else {
1302 mPUSHs(ip_address_sv)(*++sp = (Perl_sv_2mortal( ip_address_sv)));
1303 }
1304 }
1305#line 1306 "Socket.c"
1306 PUTBACKPL_stack_sp = sp;
1307 return;
1308 }
1309}
1310
1311
1312XS_EUPXS(XS_Socket_pack_sockaddr_in6)static void XS_Socket_pack_sockaddr_in6( CV* cv __attribute__
((unused)))
; /* prototype to pass -Wmissing-prototypes */
1313XS_EUPXS(XS_Socket_pack_sockaddr_in6)static void XS_Socket_pack_sockaddr_in6( CV* cv __attribute__
((unused)))
1314{
1315 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1316 if (items < 2 || items > 4)
1317 croak_xs_usagePerl_croak_xs_usage(cv, "port_sv, sin6_addr, scope_id=0, flowinfo=0");
1318 {
1319 SV * port_sv = ST(0)PL_stack_base[ax + (0)]
1320;
1321 SV * sin6_addr = ST(1)PL_stack_base[ax + (1)]
1322;
1323 unsigned long scope_id;
1324 unsigned long flowinfo;
1325
1326 if (items < 3)
1327 scope_id = 0;
1328 else {
1329 scope_id = (unsigned long)SvUV(ST(2))((((PL_stack_base[ax + (2)])->sv_flags & (0x00000100|0x80000000
|0x00200000)) == (0x00000100|0x80000000)) ? ((XPVUV*) (PL_stack_base
[ax + (2)])->sv_any)->xuv_u.xivu_uv : Perl_sv_2uv_flags
( PL_stack_base[ax + (2)],2))
1330;
1331 }
1332
1333 if (items < 4)
1334 flowinfo = 0;
1335 else {
1336 flowinfo = (unsigned long)SvUV(ST(3))((((PL_stack_base[ax + (3)])->sv_flags & (0x00000100|0x80000000
|0x00200000)) == (0x00000100|0x80000000)) ? ((XPVUV*) (PL_stack_base
[ax + (3)])->sv_any)->xuv_u.xivu_uv : Perl_sv_2uv_flags
( PL_stack_base[ax + (3)],2))
1337;
1338 }
1339#line 1046 "Socket.xs"
1340 {
1341#ifdef HAS_SOCKADDR_IN6
1342 unsigned short port = 0;
1343 struct sockaddr_in6 sin6;
1344 char * addrbytes;
1345 STRLEN addrlen;
1346 if (SvOK(port_sv)((port_sv)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
1347 port = SvUV(port_sv)((((port_sv)->sv_flags & (0x00000100|0x80000000|0x00200000
)) == (0x00000100|0x80000000)) ? ((XPVUV*) (port_sv)->sv_any
)->xuv_u.xivu_uv : Perl_sv_2uv_flags( port_sv,2))
;
1348 if (!SvOK(sin6_addr)((sin6_addr)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
1349 croakPerl_croak("Undefined address for %s", "Socket::pack_sockaddr_in6");
1350 if (DO_UTF8(sin6_addr)(((sin6_addr)->sv_flags & 0x20000000) && !__builtin_expect
(((((PL_curcop)->cop_hints + 0) & 0x00000008) ? (_Bool
)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(sin6_addr, 1)Perl_sv_utf8_downgrade_flags( sin6_addr,1,2))
1351 croakPerl_croak("Wide character in %s", "Socket::pack_sockaddr_in6");
1352 addrbytes = SvPVbyte(sin6_addr, addrlen)((((sin6_addr)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((addrlen = ((XPV*) (sin6_addr)->sv_any
)->xpv_cur), ((sin6_addr)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( sin6_addr,&addrlen,2))
;
1353 if (addrlen != sizeof(sin6.sin6_addr))
1354 croakPerl_croak("Bad arg length %s, length is %" UVuf"lu"
1355 ", should be %" UVuf"lu",
1356 "Socket::pack_sockaddr_in6", (UV)addrlen, (UV)sizeof(sin6.sin6_addr));
1357 Zero(&sin6, sizeof(sin6), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(sin6)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(sin6))))) ? (size_t)(sizeof(sin6)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), (void)memset((char*)(&sin6),0,(sizeof(sin6)) * sizeof
(char)))
;
1358 sin6.sin6_family = AF_INET624;
1359 sin6.sin6_port = htons(port)(__uint16_t)(__builtin_constant_p(port) ? (__uint16_t)(((__uint16_t
)(port) & 0xffU) << 8 | ((__uint16_t)(port) & 0xff00U
) >> 8) : __swap16md(port))
;
1360 sin6.sin6_flowinfo = htonl(flowinfo)(__uint32_t)(__builtin_constant_p(flowinfo) ? (__uint32_t)(((
__uint32_t)(flowinfo) & 0xff) << 24 | ((__uint32_t)
(flowinfo) & 0xff00) << 8 | ((__uint32_t)(flowinfo)
& 0xff0000) >> 8 | ((__uint32_t)(flowinfo) & 0xff000000
) >> 24) : __swap32md(flowinfo))
;
1361 Copy(addrbytes, &sin6.sin6_addr, sizeof(sin6.sin6_addr), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(sin6.sin6_addr)) || sizeof(char) > ((size_t)1 << 8*
(sizeof(size_t) - sizeof(sizeof(sin6.sin6_addr))))) ? (size_t
)(sizeof(sin6.sin6_addr)) : ((size_t)-1)/sizeof(char)) > (
(size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((void)0), ((void)0), (void)memcpy
((char*)(&sin6.sin6_addr),(const char*)(addrbytes), (sizeof
(sin6.sin6_addr)) * sizeof(char)))
;
1362# ifdef HAS_SIN6_SCOPE_ID
1363 sin6.sin6_scope_id = scope_id;
1364# else
1365 if (scope_id != 0)
1366 warnPerl_warn("%s cannot represent non-zero scope_id %d",
1367 "Socket::pack_sockaddr_in6", scope_id);
1368# endif
1369# ifdef HAS_SOCKADDR_SA_LEN
1370 sin6.sin6_len = sizeof(sin6);
1371# endif
1372 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn((char *)&sin6, sizeof(sin6)))Perl_sv_2mortal( Perl_newSVpvn( (char *)&sin6,sizeof(sin6
)))
;
1373#else
1374 PERL_UNUSED_VAR(port_sv)((void)sizeof(port_sv));
1375 PERL_UNUSED_VAR(sin6_addr)((void)sizeof(sin6_addr));
1376 ST(0)PL_stack_base[ax + (0)] = (SV*)not_here("pack_sockaddr_in6");
1377#endif
1378 }
1379#line 1380 "Socket.c"
1380 }
1381 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1382}
1383
1384
1385XS_EUPXS(XS_Socket_unpack_sockaddr_in6)static void XS_Socket_unpack_sockaddr_in6( CV* cv __attribute__
((unused)))
; /* prototype to pass -Wmissing-prototypes */
1386XS_EUPXS(XS_Socket_unpack_sockaddr_in6)static void XS_Socket_unpack_sockaddr_in6( CV* cv __attribute__
((unused)))
1387{
1388 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1389 if (items != 1)
1390 croak_xs_usagePerl_croak_xs_usage(cv, "sin6_sv");
1391 PERL_UNUSED_VAR(ax)((void)sizeof(ax)); /* -Wall */
1392 SPsp -= items;
1393 {
1394 SV * sin6_sv = ST(0)PL_stack_base[ax + (0)]
1395;
1396#line 1090 "Socket.xs"
1397 {
1398#ifdef HAS_SOCKADDR_IN6
1399 STRLEN addrlen;
1400 struct sockaddr_in6 sin6;
1401 char * addrbytes;
1402 SV *ip_address_sv;
1403 if (!SvOK(sin6_sv)((sin6_sv)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
)
1404 croakPerl_croak("Undefined address for %s", "Socket::unpack_sockaddr_in6");
1405 addrbytes = SvPVbyte(sin6_sv, addrlen)((((sin6_sv)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((addrlen = ((XPV*) (sin6_sv)->sv_any)
->xpv_cur), ((sin6_sv)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( sin6_sv,&addrlen,2))
;
1406 if (addrlen != sizeof(sin6))
1407 croakPerl_croak("Bad arg length for %s, length is %" UVuf"lu"
1408 ", should be %" UVuf"lu",
1409 "Socket::unpack_sockaddr_in6", (UV)addrlen, (UV)sizeof(sin6));
1410 Copy(addrbytes, &sin6, sizeof(sin6), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(sin6)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(sin6))))) ? (size_t)(sizeof(sin6)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), ((void)0), (void)memcpy((char*)(&sin6),(const char
*)(addrbytes), (sizeof(sin6)) * sizeof(char)))
;
1411 if (sin6.sin6_family != AF_INET624)
1412 croakPerl_croak("Bad address family for %s, got %d, should be %d",
1413 "Socket::unpack_sockaddr_in6", sin6.sin6_family, AF_INET624);
1414 ip_address_sv = newSVpvn((char *)&sin6.sin6_addr, sizeof(sin6.sin6_addr))Perl_newSVpvn( (char *)&sin6.sin6_addr,sizeof(sin6.sin6_addr
))
;
1415
1416 if(GIMME_VPerl_gimme_V() == G_ARRAY3) {
1417 EXTEND(SP, 4)do { (void)0; if (__builtin_expect(((((4) < 0 || PL_stack_max
- (sp) < (4))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(4) > sizeof(ssize_t) && ((ssize_t)
(4) != (4)) ? -1 : (4))); ((void)sizeof(sp)); } } while (0)
;
1418 mPUSHi(ntohs(sin6.sin6_port))Perl_sv_setiv( (*++sp = (Perl_sv_newmortal())),(IV)((__uint16_t
)(__builtin_constant_p(sin6.sin6_port) ? (__uint16_t)(((__uint16_t
)(sin6.sin6_port) & 0xffU) << 8 | ((__uint16_t)(sin6
.sin6_port) & 0xff00U) >> 8) : __swap16md(sin6.sin6_port
))))
;
1419 mPUSHs(ip_address_sv)(*++sp = (Perl_sv_2mortal( ip_address_sv)));
1420# ifdef HAS_SIN6_SCOPE_ID
1421 mPUSHi(sin6.sin6_scope_id)Perl_sv_setiv( (*++sp = (Perl_sv_newmortal())),(IV)(sin6.sin6_scope_id
))
;
1422# else
1423 mPUSHi(0)Perl_sv_setiv( (*++sp = (Perl_sv_newmortal())),(IV)(0));
1424# endif
1425 mPUSHi(ntohl(sin6.sin6_flowinfo))Perl_sv_setiv( (*++sp = (Perl_sv_newmortal())),(IV)((__uint32_t
)(__builtin_constant_p(sin6.sin6_flowinfo) ? (__uint32_t)(((__uint32_t
)(sin6.sin6_flowinfo) & 0xff) << 24 | ((__uint32_t)
(sin6.sin6_flowinfo) & 0xff00) << 8 | ((__uint32_t)
(sin6.sin6_flowinfo) & 0xff0000) >> 8 | ((__uint32_t
)(sin6.sin6_flowinfo) & 0xff000000) >> 24) : __swap32md
(sin6.sin6_flowinfo))))
;
1426 }
1427 else {
1428 mPUSHs(ip_address_sv)(*++sp = (Perl_sv_2mortal( ip_address_sv)));
1429 }
1430#else
1431 PERL_UNUSED_VAR(sin6_sv)((void)sizeof(sin6_sv));
1432 ST(0)PL_stack_base[ax + (0)] = (SV*)not_here("pack_sockaddr_in6");
1433#endif
1434 }
1435#line 1436 "Socket.c"
1436 PUTBACKPL_stack_sp = sp;
1437 return;
1438 }
1439}
1440
1441
1442XS_EUPXS(XS_Socket_inet_ntop)static void XS_Socket_inet_ntop( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
1443XS_EUPXS(XS_Socket_inet_ntop)static void XS_Socket_inet_ntop( CV* cv __attribute__((unused
)))
1444{
1445 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1446 if (items != 2)
1447 croak_xs_usagePerl_croak_xs_usage(cv, "af, ip_address_sv");
1448 {
1449 int af = (int)SvIV(ST(0))((((PL_stack_base[ax + (0)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (0)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
0)],2))
1450;
1451 SV * ip_address_sv = ST(1)PL_stack_base[ax + (1)]
1452;
1453#line 1134 "Socket.xs"
1454#ifdef HAS_INETNTOP
1455 STRLEN addrlen;
1456#ifdef AF_INET624
1457 struct in6_addr addr;
1458 char str[INET6_ADDRSTRLEN46];
1459#else
1460 struct in_addr addr;
1461 char str[INET_ADDRSTRLEN16];
1462#endif
1463 char *ip_address;
1464
1465 if (DO_UTF8(ip_address_sv)(((ip_address_sv)->sv_flags & 0x20000000) && !
__builtin_expect(((((PL_curcop)->cop_hints + 0) & 0x00000008
) ? (_Bool)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(ip_address_sv, 1)Perl_sv_utf8_downgrade_flags( ip_address_sv,1,2))
1466 croakPerl_croak("Wide character in %s", "Socket::inet_ntop");
1467
1468 ip_address = SvPV(ip_address_sv, addrlen)((((ip_address_sv)->sv_flags & (0x00000400|0x00200000)
) == 0x00000400) ? ((addrlen = ((XPV*) (ip_address_sv)->sv_any
)->xpv_cur), ((ip_address_sv)->sv_u.svu_pv)) : Perl_sv_2pv_flags
( ip_address_sv,&addrlen,2))
;
1469
1470 switch(af) {
1471 case AF_INET2:
1472 if(addrlen != 4)
1473 croakPerl_croak("Bad address length for Socket::inet_ntop on AF_INET;"
1474 " got %" UVuf"lu" ", should be 4", (UV)addrlen);
1475 break;
1476#ifdef AF_INET624
1477 case AF_INET624:
1478 if(addrlen != 16)
1479 croakPerl_croak("Bad address length for Socket::inet_ntop on AF_INET6;"
1480 " got %" UVuf"lu" ", should be 16", (UV)addrlen);
1481 break;
1482#endif
1483 default:
1484 croakPerl_croak("Bad address family for %s, got %d, should be"
1485#ifdef AF_INET624
1486 " either AF_INET or AF_INET6",
1487#else
1488 " AF_INET",
1489#endif
1490 "Socket::inet_ntop", af);
1491 }
1492
1493 if(addrlen < sizeof(addr)) {
1494 Copy(ip_address, &addr, addrlen, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(addrlen
) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t) -
sizeof(addrlen)))) ? (size_t)(addrlen) : ((size_t)-1)/sizeof
(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)
0),(0)) && (Perl_croak_memory_wrap(),0)), ((void)0), (
(void)0), (void)memcpy((char*)(&addr),(const char*)(ip_address
), (addrlen) * sizeof(char)))
;
1495 Zero(((char*)&addr) + addrlen, sizeof(addr) - addrlen, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(addr) - addrlen) || sizeof(char) > ((size_t)1 << 8*
(sizeof(size_t) - sizeof(sizeof(addr) - addrlen)))) ? (size_t
)(sizeof(addr) - addrlen) : ((size_t)-1)/sizeof(char)) > (
(size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0)) &&
(Perl_croak_memory_wrap(),0)), ((void)0), (void)memset((char
*)(((char*)&addr) + addrlen),0,(sizeof(addr) - addrlen) *
sizeof(char)))
;
1496 }
1497 else {
1498 Copy(ip_address, &addr, sizeof addr, char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
addr) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof addr)))) ? (size_t)(sizeof addr) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), ((void)0), (void)memcpy((char*)(&addr),(const char
*)(ip_address), (sizeof addr) * sizeof(char)))
;
1499 }
1500 inet_ntop(af, &addr, str, sizeof str);
1501
1502 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn(str, strlen(str)))Perl_sv_2mortal( Perl_newSVpvn( str,strlen(str)));
1503#else
1504 PERL_UNUSED_VAR(af)((void)sizeof(af));
1505 PERL_UNUSED_VAR(ip_address_sv)((void)sizeof(ip_address_sv));
1506 ST(0)PL_stack_base[ax + (0)] = (SV*)not_here("inet_ntop");
1507#endif
1508#line 1509 "Socket.c"
1509 }
1510 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1511}
1512
1513
1514XS_EUPXS(XS_Socket_inet_pton)static void XS_Socket_inet_pton( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
1515XS_EUPXS(XS_Socket_inet_pton)static void XS_Socket_inet_pton( CV* cv __attribute__((unused
)))
1516{
1517 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1518 if (items != 2)
1519 croak_xs_usagePerl_croak_xs_usage(cv, "af, host");
1520 {
1521 int af = (int)SvIV(ST(0))((((PL_stack_base[ax + (0)])->sv_flags & (0x00000100|0x00200000
)) == 0x00000100) ? ((XPVIV*) (PL_stack_base[ax + (0)])->sv_any
)->xiv_u.xivu_iv : Perl_sv_2iv_flags( PL_stack_base[ax + (
0)],2))
1522;
1523 const char * host = (const char *)SvPV_nolen(ST(1))((((PL_stack_base[ax + (1)])->sv_flags & (0x00000400|0x00200000
)) == 0x00000400) ? ((PL_stack_base[ax + (1)])->sv_u.svu_pv
) : Perl_sv_2pv_flags( PL_stack_base[ax + (1)],0,2))
1524;
1525#line 1194 "Socket.xs"
1526#ifdef HAS_INETPTON
1527 int ok;
1528 int addrlen = 0;
1529#ifdef AF_INET624
1530 struct in6_addr ip_address;
1531#else
1532 struct in_addr ip_address;
1533#endif
1534
1535 switch(af) {
1536 case AF_INET2:
1537 addrlen = 4;
1538 break;
1539#ifdef AF_INET624
1540 case AF_INET624:
1541 addrlen = 16;
1542 break;
1543#endif
1544 default:
1545 croakPerl_croak("Bad address family for %s, got %d, should be"
1546#ifdef AF_INET624
1547 " either AF_INET or AF_INET6",
1548#else
1549 " AF_INET",
1550#endif
1551 "Socket::inet_pton", af);
1552 }
1553 ok = (*host != '\0') && inet_pton(af, host, &ip_address);
1554
1555 ST(0)PL_stack_base[ax + (0)] = sv_newmortal()Perl_sv_newmortal();
1556 if (ok) {
1557 sv_setpvn( ST(0), (char *)&ip_address, addrlen)Perl_sv_setpvn( PL_stack_base[ax + (0)],(char *)&ip_address
,addrlen)
;
1558 }
1559#else
1560 PERL_UNUSED_VAR(af)((void)sizeof(af));
1561 PERL_UNUSED_VAR(host)((void)sizeof(host));
1562 ST(0)PL_stack_base[ax + (0)] = (SV*)not_here("inet_pton");
1563#endif
1564#line 1565 "Socket.c"
1565 }
1566 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1567}
1568
1569
1570XS_EUPXS(XS_Socket_pack_ip_mreq)static void XS_Socket_pack_ip_mreq( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
1571XS_EUPXS(XS_Socket_pack_ip_mreq)static void XS_Socket_pack_ip_mreq( CV* cv __attribute__((unused
)))
1572{
1573 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1574 if (items < 1 || items > 2)
1575 croak_xs_usagePerl_croak_xs_usage(cv, "multiaddr, interface=&PL_sv_undef");
1576 {
1577 SV * multiaddr = ST(0)PL_stack_base[ax + (0)]
1578;
1579 SV * interface;
1580
1581 if (items < 2)
1582 interface = &PL_sv_undef(PL_sv_immortals[1]);
1583 else {
1584 interface = ST(1)PL_stack_base[ax + (1)]
1585;
1586 }
1587#line 1238 "Socket.xs"
1588 {
1589#ifdef HAS_IP_MREQ
1590 struct ip_mreq mreq;
1591 char * multiaddrbytes;
1592 char * interfacebytes;
1593 STRLEN len;
1594 if (DO_UTF8(multiaddr)(((multiaddr)->sv_flags & 0x20000000) && !__builtin_expect
(((((PL_curcop)->cop_hints + 0) & 0x00000008) ? (_Bool
)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(multiaddr, 1)Perl_sv_utf8_downgrade_flags( multiaddr,1,2))
1595 croakPerl_croak("Wide character in %s", "Socket::pack_ip_mreq");
1596 multiaddrbytes = SvPVbyte(multiaddr, len)((((multiaddr)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((len = ((XPV*) (multiaddr)->sv_any)->
xpv_cur), ((multiaddr)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( multiaddr,&len,2))
;
1597 if (len != sizeof(mreq.imr_multiaddr))
1598 croakPerl_croak("Bad arg length %s, length is %" UVuf"lu"
1599 ", should be %" UVuf"lu",
1600 "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_multiaddr));
1601 Zero(&mreq, sizeof(mreq), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(mreq))))) ? (size_t)(sizeof(mreq)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), (void)memset((char*)(&mreq),0,(sizeof(mreq)) * sizeof
(char)))
;
1602 Copy(multiaddrbytes, &mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq.imr_multiaddr)) || sizeof(char) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(sizeof(mreq.imr_multiaddr))))) ? (
size_t)(sizeof(mreq.imr_multiaddr)) : ((size_t)-1)/sizeof(char
)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), ((void)0), ((void
)0), (void)memcpy((char*)(&mreq.imr_multiaddr),(const char
*)(multiaddrbytes), (sizeof(mreq.imr_multiaddr)) * sizeof(char
)))
;
1603 if(SvOK(interface)((interface)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
) {
1604 if (DO_UTF8(interface)(((interface)->sv_flags & 0x20000000) && !__builtin_expect
(((((PL_curcop)->cop_hints + 0) & 0x00000008) ? (_Bool
)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(interface, 1)Perl_sv_utf8_downgrade_flags( interface,1,2))
1605 croakPerl_croak("Wide character in %s", "Socket::pack_ip_mreq");
1606 interfacebytes = SvPVbyte(interface, len)((((interface)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((len = ((XPV*) (interface)->sv_any)->
xpv_cur), ((interface)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( interface,&len,2))
;
1607 if (len != sizeof(mreq.imr_interface))
1608 croakPerl_croak("Bad arg length %s, length is %" UVuf"lu"
1609 ", should be %" UVuf"lu",
1610 "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_interface));
1611 Copy(interfacebytes, &mreq.imr_interface, sizeof(mreq.imr_interface), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq.imr_interface)) || sizeof(char) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(sizeof(mreq.imr_interface))))) ? (
size_t)(sizeof(mreq.imr_interface)) : ((size_t)-1)/sizeof(char
)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), ((void)0), ((void
)0), (void)memcpy((char*)(&mreq.imr_interface),(const char
*)(interfacebytes), (sizeof(mreq.imr_interface)) * sizeof(char
)))
;
1612 }
1613 else
1614 mreq.imr_interface.s_addr = INADDR_ANY((u_int32_t)(0x00000000));
1615 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn((char *)&mreq, sizeof(mreq)))Perl_sv_2mortal( Perl_newSVpvn( (char *)&mreq,sizeof(mreq
)))
;
1616#else
1617 not_here("pack_ip_mreq");
1618#endif
1619 }
1620#line 1621 "Socket.c"
1621 }
1622 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1623}
1624
1625
1626XS_EUPXS(XS_Socket_unpack_ip_mreq)static void XS_Socket_unpack_ip_mreq( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
1627XS_EUPXS(XS_Socket_unpack_ip_mreq)static void XS_Socket_unpack_ip_mreq( CV* cv __attribute__((unused
)))
1628{
1629 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1630 if (items != 1)
1631 croak_xs_usagePerl_croak_xs_usage(cv, "mreq_sv");
1632 PERL_UNUSED_VAR(ax)((void)sizeof(ax)); /* -Wall */
1633 SPsp -= items;
1634 {
1635 SV * mreq_sv = ST(0)PL_stack_base[ax + (0)]
1636;
1637#line 1275 "Socket.xs"
1638 {
1639#ifdef HAS_IP_MREQ
1640 struct ip_mreq mreq;
1641 STRLEN mreqlen;
1642 char * mreqbytes = SvPVbyte(mreq_sv, mreqlen)((((mreq_sv)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((mreqlen = ((XPV*) (mreq_sv)->sv_any)
->xpv_cur), ((mreq_sv)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( mreq_sv,&mreqlen,2))
;
1643 if (mreqlen != sizeof(mreq))
1644 croakPerl_croak("Bad arg length for %s, length is %" UVuf"lu"
1645 ", should be %" UVuf"lu",
1646 "Socket::unpack_ip_mreq", (UV)mreqlen, (UV)sizeof(mreq));
1647 Copy(mreqbytes, &mreq, sizeof(mreq), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(mreq))))) ? (size_t)(sizeof(mreq)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), ((void)0), (void)memcpy((char*)(&mreq),(const char
*)(mreqbytes), (sizeof(mreq)) * sizeof(char)))
;
1648 EXTEND(SP, 2)do { (void)0; if (__builtin_expect(((((2) < 0 || PL_stack_max
- (sp) < (2))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(2) > sizeof(ssize_t) && ((ssize_t)
(2) != (2)) ? -1 : (2))); ((void)sizeof(sp)); } } while (0)
;
1649 mPUSHp((char *)&mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr))(*++sp = (Perl_newSVpvn_flags( ((char *)&mreq.imr_multiaddr
),(sizeof(mreq.imr_multiaddr)),0x00080000)))
;
1650 mPUSHp((char *)&mreq.imr_interface, sizeof(mreq.imr_interface))(*++sp = (Perl_newSVpvn_flags( ((char *)&mreq.imr_interface
),(sizeof(mreq.imr_interface)),0x00080000)))
;
1651#else
1652 not_here("unpack_ip_mreq");
1653#endif
1654 }
1655#line 1656 "Socket.c"
1656 PUTBACKPL_stack_sp = sp;
1657 return;
1658 }
1659}
1660
1661
1662XS_EUPXS(XS_Socket_pack_ip_mreq_source)static void XS_Socket_pack_ip_mreq_source( CV* cv __attribute__
((unused)))
; /* prototype to pass -Wmissing-prototypes */
1663XS_EUPXS(XS_Socket_pack_ip_mreq_source)static void XS_Socket_pack_ip_mreq_source( CV* cv __attribute__
((unused)))
1664{
1665 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1666 if (items < 2 || items > 3)
1667 croak_xs_usagePerl_croak_xs_usage(cv, "multiaddr, source, interface=&PL_sv_undef");
1668 {
1669 SV * multiaddr = ST(0)PL_stack_base[ax + (0)]
1670;
1671 SV * source = ST(1)PL_stack_base[ax + (1)]
1672;
1673 SV * interface;
1674
1675 if (items < 3)
1676 interface = &PL_sv_undef(PL_sv_immortals[1]);
1677 else {
1678 interface = ST(2)PL_stack_base[ax + (2)]
1679;
1680 }
1681#line 1299 "Socket.xs"
1682 {
1683#if defined(HAS_IP_MREQ_SOURCE) && defined (IP_ADD_SOURCE_MEMBERSHIP)
1684 struct ip_mreq_source mreq;
1685 char * multiaddrbytes;
1686 char * sourcebytes;
1687 char * interfacebytes;
1688 STRLEN len;
1689 if (DO_UTF8(multiaddr)(((multiaddr)->sv_flags & 0x20000000) && !__builtin_expect
(((((PL_curcop)->cop_hints + 0) & 0x00000008) ? (_Bool
)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(multiaddr, 1)Perl_sv_utf8_downgrade_flags( multiaddr,1,2))
1690 croakPerl_croak("Wide character in %s", "Socket::pack_ip_mreq_source");
1691 multiaddrbytes = SvPVbyte(multiaddr, len)((((multiaddr)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((len = ((XPV*) (multiaddr)->sv_any)->
xpv_cur), ((multiaddr)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( multiaddr,&len,2))
;
1692 if (len != sizeof(mreq.imr_multiaddr))
1693 croakPerl_croak("Bad arg length %s, length is %" UVuf"lu"
1694 ", should be %" UVuf"lu",
1695 "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_multiaddr));
1696 if (DO_UTF8(source)(((source)->sv_flags & 0x20000000) && !__builtin_expect
(((((PL_curcop)->cop_hints + 0) & 0x00000008) ? (_Bool
)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(source, 1)Perl_sv_utf8_downgrade_flags( source,1,2))
1697 croakPerl_croak("Wide character in %s", "Socket::pack_ip_mreq_source");
1698 if (len != sizeof(mreq.imr_sourceaddr))
1699 croakPerl_croak("Bad arg length %s, length is %" UVuf"lu"
1700 ", should be %" UVuf"lu",
1701 "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_sourceaddr));
1702 sourcebytes = SvPVbyte(source, len)((((source)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((len = ((XPV*) (source)->sv_any)->
xpv_cur), ((source)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( source,&len,2))
;
1703 Zero(&mreq, sizeof(mreq), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(mreq))))) ? (size_t)(sizeof(mreq)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), (void)memset((char*)(&mreq),0,(sizeof(mreq)) * sizeof
(char)))
;
1704 Copy(multiaddrbytes, &mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq.imr_multiaddr)) || sizeof(char) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(sizeof(mreq.imr_multiaddr))))) ? (
size_t)(sizeof(mreq.imr_multiaddr)) : ((size_t)-1)/sizeof(char
)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), ((void)0), ((void
)0), (void)memcpy((char*)(&mreq.imr_multiaddr),(const char
*)(multiaddrbytes), (sizeof(mreq.imr_multiaddr)) * sizeof(char
)))
;
1705 Copy(sourcebytes, &mreq.imr_sourceaddr, sizeof(mreq.imr_sourceaddr), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq.imr_sourceaddr)) || sizeof(char) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(sizeof(mreq.imr_sourceaddr))))) ?
(size_t)(sizeof(mreq.imr_sourceaddr)) : ((size_t)-1)/sizeof(
char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0
),(0)) && (Perl_croak_memory_wrap(),0)), ((void)0), (
(void)0), (void)memcpy((char*)(&mreq.imr_sourceaddr),(const
char*)(sourcebytes), (sizeof(mreq.imr_sourceaddr)) * sizeof(
char)))
;
1706 if(SvOK(interface)((interface)->sv_flags & (0x00000100|0x00000200|0x00000400
|0x00000800| 0x00001000|0x00002000|0x00004000|0x00008000))
) {
1707 if (DO_UTF8(interface)(((interface)->sv_flags & 0x20000000) && !__builtin_expect
(((((PL_curcop)->cop_hints + 0) & 0x00000008) ? (_Bool
)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(interface, 1)Perl_sv_utf8_downgrade_flags( interface,1,2))
1708 croakPerl_croak("Wide character in %s", "Socket::pack_ip_mreq");
1709 interfacebytes = SvPVbyte(interface, len)((((interface)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((len = ((XPV*) (interface)->sv_any)->
xpv_cur), ((interface)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( interface,&len,2))
;
1710 if (len != sizeof(mreq.imr_interface))
1711 croakPerl_croak("Bad arg length %s, length is %" UVuf"lu"
1712 ", should be %" UVuf"lu",
1713 "Socket::pack_ip_mreq", (UV)len, (UV)sizeof(mreq.imr_interface));
1714 Copy(interfacebytes, &mreq.imr_interface, sizeof(mreq.imr_interface), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq.imr_interface)) || sizeof(char) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(sizeof(mreq.imr_interface))))) ? (
size_t)(sizeof(mreq.imr_interface)) : ((size_t)-1)/sizeof(char
)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)0),(0
)) && (Perl_croak_memory_wrap(),0)), ((void)0), ((void
)0), (void)memcpy((char*)(&mreq.imr_interface),(const char
*)(interfacebytes), (sizeof(mreq.imr_interface)) * sizeof(char
)))
;
1715 }
1716 else
1717 mreq.imr_interface.s_addr = INADDR_ANY((u_int32_t)(0x00000000));
1718 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn((char *)&mreq, sizeof(mreq)))Perl_sv_2mortal( Perl_newSVpvn( (char *)&mreq,sizeof(mreq
)))
;
1719#else
1720 PERL_UNUSED_VAR(multiaddr)((void)sizeof(multiaddr));
1721 PERL_UNUSED_VAR(source)((void)sizeof(source));
1722 not_here("pack_ip_mreq_source");
1723#endif
1724 }
1725#line 1726 "Socket.c"
1726 }
1727 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1728}
1729
1730
1731XS_EUPXS(XS_Socket_unpack_ip_mreq_source)static void XS_Socket_unpack_ip_mreq_source( CV* cv __attribute__
((unused)))
; /* prototype to pass -Wmissing-prototypes */
1732XS_EUPXS(XS_Socket_unpack_ip_mreq_source)static void XS_Socket_unpack_ip_mreq_source( CV* cv __attribute__
((unused)))
1733{
1734 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1735 if (items != 1)
1736 croak_xs_usagePerl_croak_xs_usage(cv, "mreq_sv");
1737 PERL_UNUSED_VAR(ax)((void)sizeof(ax)); /* -Wall */
1738 SPsp -= items;
1739 {
1740 SV * mreq_sv = ST(0)PL_stack_base[ax + (0)]
Value stored to 'mreq_sv' during its initialization is never read
1741;
1742#line 1347 "Socket.xs"
1743 {
1744#if defined(HAS_IP_MREQ_SOURCE) && defined (IP_ADD_SOURCE_MEMBERSHIP)
1745 struct ip_mreq_source mreq;
1746 STRLEN mreqlen;
1747 char * mreqbytes = SvPVbyte(mreq_sv, mreqlen)((((mreq_sv)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((mreqlen = ((XPV*) (mreq_sv)->sv_any)
->xpv_cur), ((mreq_sv)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( mreq_sv,&mreqlen,2))
;
1748 if (mreqlen != sizeof(mreq))
1749 croakPerl_croak("Bad arg length for %s, length is %" UVuf"lu"
1750 ", should be %" UVuf"lu",
1751 "Socket::unpack_ip_mreq_source", (UV)mreqlen, (UV)sizeof(mreq));
1752 Copy(mreqbytes, &mreq, sizeof(mreq), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(mreq))))) ? (size_t)(sizeof(mreq)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), ((void)0), (void)memcpy((char*)(&mreq),(const char
*)(mreqbytes), (sizeof(mreq)) * sizeof(char)))
;
1753 EXTEND(SP, 3)do { (void)0; if (__builtin_expect(((((3) < 0 || PL_stack_max
- (sp) < (3))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(3) > sizeof(ssize_t) && ((ssize_t)
(3) != (3)) ? -1 : (3))); ((void)sizeof(sp)); } } while (0)
;
1754 mPUSHp((char *)&mreq.imr_multiaddr, sizeof(mreq.imr_multiaddr))(*++sp = (Perl_newSVpvn_flags( ((char *)&mreq.imr_multiaddr
),(sizeof(mreq.imr_multiaddr)),0x00080000)))
;
1755 mPUSHp((char *)&mreq.imr_sourceaddr, sizeof(mreq.imr_sourceaddr))(*++sp = (Perl_newSVpvn_flags( ((char *)&mreq.imr_sourceaddr
),(sizeof(mreq.imr_sourceaddr)),0x00080000)))
;
1756 mPUSHp((char *)&mreq.imr_interface, sizeof(mreq.imr_interface))(*++sp = (Perl_newSVpvn_flags( ((char *)&mreq.imr_interface
),(sizeof(mreq.imr_interface)),0x00080000)))
;
1757#else
1758 PERL_UNUSED_VAR(mreq_sv)((void)sizeof(mreq_sv));
1759 not_here("unpack_ip_mreq_source");
1760#endif
1761 }
1762#line 1763 "Socket.c"
1763 PUTBACKPL_stack_sp = sp;
1764 return;
1765 }
1766}
1767
1768
1769XS_EUPXS(XS_Socket_pack_ipv6_mreq)static void XS_Socket_pack_ipv6_mreq( CV* cv __attribute__((unused
)))
; /* prototype to pass -Wmissing-prototypes */
1770XS_EUPXS(XS_Socket_pack_ipv6_mreq)static void XS_Socket_pack_ipv6_mreq( CV* cv __attribute__((unused
)))
1771{
1772 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1773 if (items != 2)
1774 croak_xs_usagePerl_croak_xs_usage(cv, "multiaddr, ifindex");
1775 {
1776 SV * multiaddr = ST(0)PL_stack_base[ax + (0)]
1777;
1778 unsigned int ifindex = (unsigned int)SvUV(ST(1))((((PL_stack_base[ax + (1)])->sv_flags & (0x00000100|0x80000000
|0x00200000)) == (0x00000100|0x80000000)) ? ((XPVUV*) (PL_stack_base
[ax + (1)])->sv_any)->xuv_u.xivu_uv : Perl_sv_2uv_flags
( PL_stack_base[ax + (1)],2))
1779;
1780#line 1372 "Socket.xs"
1781 {
1782#ifdef HAS_IPV6_MREQ
1783 struct ipv6_mreq mreq;
1784 char * multiaddrbytes;
1785 STRLEN len;
1786 if (DO_UTF8(multiaddr)(((multiaddr)->sv_flags & 0x20000000) && !__builtin_expect
(((((PL_curcop)->cop_hints + 0) & 0x00000008) ? (_Bool
)1 : (_Bool)0),(0)))
&& !sv_utf8_downgrade(multiaddr, 1)Perl_sv_utf8_downgrade_flags( multiaddr,1,2))
1787 croakPerl_croak("Wide character in %s", "Socket::pack_ipv6_mreq");
1788 multiaddrbytes = SvPVbyte(multiaddr, len)((((multiaddr)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((len = ((XPV*) (multiaddr)->sv_any)->
xpv_cur), ((multiaddr)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( multiaddr,&len,2))
;
1789 if (len != sizeof(mreq.ipv6mr_multiaddr))
1790 croakPerl_croak("Bad arg length %s, length is %" UVuf"lu"
1791 ", should be %" UVuf"lu",
1792 "Socket::pack_ipv6_mreq", (UV)len, (UV)sizeof(mreq.ipv6mr_multiaddr));
1793 Zero(&mreq, sizeof(mreq), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(mreq))))) ? (size_t)(sizeof(mreq)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), (void)memset((char*)(&mreq),0,(sizeof(mreq)) * sizeof
(char)))
;
1794 Copy(multiaddrbytes, &mreq.ipv6mr_multiaddr, sizeof(mreq.ipv6mr_multiaddr), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq.ipv6mr_multiaddr)) || sizeof(char) > ((size_t)1 <<
8*(sizeof(size_t) - sizeof(sizeof(mreq.ipv6mr_multiaddr)))))
? (size_t)(sizeof(mreq.ipv6mr_multiaddr)) : ((size_t)-1)/sizeof
(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)1 : (_Bool)
0),(0)) && (Perl_croak_memory_wrap(),0)), ((void)0), (
(void)0), (void)memcpy((char*)(&mreq.ipv6mr_multiaddr),(const
char*)(multiaddrbytes), (sizeof(mreq.ipv6mr_multiaddr)) * sizeof
(char)))
;
1795 mreq.ipv6mr_interface = ifindex;
1796 ST(0)PL_stack_base[ax + (0)] = sv_2mortal(newSVpvn((char *)&mreq, sizeof(mreq)))Perl_sv_2mortal( Perl_newSVpvn( (char *)&mreq,sizeof(mreq
)))
;
1797#else
1798 PERL_UNUSED_VAR(multiaddr)((void)sizeof(multiaddr));
1799 PERL_UNUSED_VAR(ifindex)((void)sizeof(ifindex));
1800 not_here("pack_ipv6_mreq");
1801#endif
1802 }
1803#line 1804 "Socket.c"
1804 }
1805 XSRETURN(1)do { const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0)
;
1806}
1807
1808
1809XS_EUPXS(XS_Socket_unpack_ipv6_mreq)static void XS_Socket_unpack_ipv6_mreq( CV* cv __attribute__(
(unused)))
; /* prototype to pass -Wmissing-prototypes */
1810XS_EUPXS(XS_Socket_unpack_ipv6_mreq)static void XS_Socket_unpack_ipv6_mreq( CV* cv __attribute__(
(unused)))
1811{
1812 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1813 if (items != 1)
1814 croak_xs_usagePerl_croak_xs_usage(cv, "mreq_sv");
1815 PERL_UNUSED_VAR(ax)((void)sizeof(ax)); /* -Wall */
1816 SPsp -= items;
1817 {
1818 SV * mreq_sv = ST(0)PL_stack_base[ax + (0)]
1819;
1820#line 1399 "Socket.xs"
1821 {
1822#ifdef HAS_IPV6_MREQ
1823 struct ipv6_mreq mreq;
1824 STRLEN mreqlen;
1825 char * mreqbytes = SvPVbyte(mreq_sv, mreqlen)((((mreq_sv)->sv_flags & (0x00000400|0x20000000|0x00200000
)) == 0x00000400) ? ((mreqlen = ((XPV*) (mreq_sv)->sv_any)
->xpv_cur), ((mreq_sv)->sv_u.svu_pv)) : Perl_sv_2pvbyte_flags
( mreq_sv,&mreqlen,2))
;
1826 if (mreqlen != sizeof(mreq))
1827 croakPerl_croak("Bad arg length for %s, length is %" UVuf"lu"
1828 ", should be %" UVuf"lu",
1829 "Socket::unpack_ipv6_mreq", (UV)mreqlen, (UV)sizeof(mreq));
1830 Copy(mreqbytes, &mreq, sizeof(mreq), char)((void)(__builtin_expect(((((( sizeof(size_t) < sizeof(sizeof
(mreq)) || sizeof(char) > ((size_t)1 << 8*(sizeof(size_t
) - sizeof(sizeof(mreq))))) ? (size_t)(sizeof(mreq)) : ((size_t
)-1)/sizeof(char)) > ((size_t)-1)/sizeof(char))) ? (_Bool)
1 : (_Bool)0),(0)) && (Perl_croak_memory_wrap(),0)), (
(void)0), ((void)0), (void)memcpy((char*)(&mreq),(const char
*)(mreqbytes), (sizeof(mreq)) * sizeof(char)))
;
1831 EXTEND(SP, 2)do { (void)0; if (__builtin_expect(((((2) < 0 || PL_stack_max
- (sp) < (2))) ? (_Bool)1 : (_Bool)0),(0))) { sp = Perl_stack_grow
( sp,sp,(sizeof(2) > sizeof(ssize_t) && ((ssize_t)
(2) != (2)) ? -1 : (2))); ((void)sizeof(sp)); } } while (0)
;
1832 mPUSHp((char *)&mreq.ipv6mr_multiaddr, sizeof(mreq.ipv6mr_multiaddr))(*++sp = (Perl_newSVpvn_flags( ((char *)&mreq.ipv6mr_multiaddr
),(sizeof(mreq.ipv6mr_multiaddr)),0x00080000)))
;
1833 mPUSHi(mreq.ipv6mr_interface)Perl_sv_setiv( (*++sp = (Perl_sv_newmortal())),(IV)(mreq.ipv6mr_interface
))
;
1834#else
1835 PERL_UNUSED_VAR(mreq_sv)((void)sizeof(mreq_sv));
1836 not_here("unpack_ipv6_mreq");
1837#endif
1838 }
1839#line 1840 "Socket.c"
1840 PUTBACKPL_stack_sp = sp;
1841 return;
1842 }
1843}
1844
1845#ifdef __cplusplus
1846extern "C"
1847#endif
1848XS_EXTERNAL(boot_Socket)void boot_Socket( CV* cv __attribute__((unused))); /* prototype to pass -Wmissing-prototypes */
1849XS_EXTERNAL(boot_Socket)void boot_Socket( CV* cv __attribute__((unused)))
1850{
1851#if PERL_VERSION_LE(5, 21, 5)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 21*1000 + 5))
1852 dVARstruct Perl___notused_struct; dXSARGSSV **sp = PL_stack_sp; I32 ax = Perl_POPMARK(); SV **mark = PL_stack_base
+ ax++; I32 items = (I32)(sp - mark)
;
1853#else
1854 dVARstruct Perl___notused_struct; dXSBOOTARGSXSAPIVERCHKI32 ax = Perl_xs_handshake((((sizeof(struct PerlHandShakeInterpreter
)) << 16) | ((sizeof("" "2.029" "")-1) > 0xFF ? (Perl_croak
("panic: handshake overflow"), 0xFF) : (sizeof("" "2.029" "")
-1) << 8) | ((((1)) ? (_Bool)1 : (_Bool)0) ? 0x00000020
: 0) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000080 : 0) | ((
((1)) ? (_Bool)1 : (_Bool)0) ? 0x00000040 : 0) | ((sizeof("" "v"
"5" "." "32" "." "0" "")-1) > 0x0000001F ? (Perl_croak("panic: handshake overflow"
), 0x0000001F) : (sizeof("" "v" "5" "." "32" "." "0" "")-1)))
, cv, "Socket.c", "v" "5" "." "32" "." "0", "2.029"); SV **mark
= PL_stack_base + ax; SV **sp = PL_stack_sp; I32 items = (I32
)(sp - mark)
;
1855#endif
1856#if (PERL_REVISION5 == 5 && PERL_VERSION32 < 9)
1857 char* file = __FILE__"Socket.c";
1858#else
1859 const char* file = __FILE__"Socket.c";
1860#endif
1861
1862 PERL_UNUSED_VAR(file)((void)sizeof(file));
1863
1864 PERL_UNUSED_VAR(cv)((void)sizeof(cv)); /* -W */
1865 PERL_UNUSED_VAR(items)((void)sizeof(items)); /* -W */
1866#if PERL_VERSION_LE(5, 21, 5)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 21*1000 + 5))
1867 XS_VERSION_BOOTCHECKPerl_xs_handshake((((sizeof(struct PerlHandShakeInterpreter))
<< 16) | ((sizeof("" "2.029" "")-1) > 0xFF ? (Perl_croak
("panic: handshake overflow"), 0xFF) : (sizeof("" "2.029" "")
-1) << 8) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000020
: 0) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000080 : 0) | ((
((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000040 : 0) | ((sizeof("" ""
"")-1) > 0x0000001F ? (Perl_croak("panic: handshake overflow"
), 0x0000001F) : (sizeof("" "" "")-1))), cv, "Socket.c", items
, ax, "2.029")
;
1868# ifdef XS_APIVERSION_BOOTCHECKPerl_xs_handshake((((sizeof(struct PerlHandShakeInterpreter))
<< 16) | ((sizeof("" "" "")-1) > 0xFF ? (Perl_croak
("panic: handshake overflow"), 0xFF) : (sizeof("" "" "")-1) <<
8) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000020 : 0) | ((((
0)) ? (_Bool)1 : (_Bool)0) ? 0x00000080 : 0) | ((((0)) ? (_Bool
)1 : (_Bool)0) ? 0x00000040 : 0) | ((sizeof("" "v" "5" "." "32"
"." "0" "")-1) > 0x0000001F ? (Perl_croak("panic: handshake overflow"
), 0x0000001F) : (sizeof("" "v" "5" "." "32" "." "0" "")-1)))
, cv, "Socket.c", items, ax, "v" "5" "." "32" "." "0")
1869 XS_APIVERSION_BOOTCHECKPerl_xs_handshake((((sizeof(struct PerlHandShakeInterpreter))
<< 16) | ((sizeof("" "" "")-1) > 0xFF ? (Perl_croak
("panic: handshake overflow"), 0xFF) : (sizeof("" "" "")-1) <<
8) | ((((0)) ? (_Bool)1 : (_Bool)0) ? 0x00000020 : 0) | ((((
0)) ? (_Bool)1 : (_Bool)0) ? 0x00000080 : 0) | ((((0)) ? (_Bool
)1 : (_Bool)0) ? 0x00000040 : 0) | ((sizeof("" "v" "5" "." "32"
"." "0" "")-1) > 0x0000001F ? (Perl_croak("panic: handshake overflow"
), 0x0000001F) : (sizeof("" "v" "5" "." "32" "." "0" "")-1)))
, cv, "Socket.c", items, ax, "v" "5" "." "32" "." "0")
;
1870# endif
1871#endif
1872
1873 newXS_deffile("Socket::AUTOLOAD", XS_Socket_AUTOLOAD)Perl_newXS_deffile( "Socket::AUTOLOAD",XS_Socket_AUTOLOAD);
1874 newXS_deffile("Socket::inet_aton", XS_Socket_inet_aton)Perl_newXS_deffile( "Socket::inet_aton",XS_Socket_inet_aton);
1875 newXS_deffile("Socket::inet_ntoa", XS_Socket_inet_ntoa)Perl_newXS_deffile( "Socket::inet_ntoa",XS_Socket_inet_ntoa);
1876 newXS_deffile("Socket::sockaddr_family", XS_Socket_sockaddr_family)Perl_newXS_deffile( "Socket::sockaddr_family",XS_Socket_sockaddr_family
)
;
1877 newXS_deffile("Socket::pack_sockaddr_un", XS_Socket_pack_sockaddr_un)Perl_newXS_deffile( "Socket::pack_sockaddr_un",XS_Socket_pack_sockaddr_un
)
;
1878 newXS_deffile("Socket::unpack_sockaddr_un", XS_Socket_unpack_sockaddr_un)Perl_newXS_deffile( "Socket::unpack_sockaddr_un",XS_Socket_unpack_sockaddr_un
)
;
1879 newXS_deffile("Socket::pack_sockaddr_in", XS_Socket_pack_sockaddr_in)Perl_newXS_deffile( "Socket::pack_sockaddr_in",XS_Socket_pack_sockaddr_in
)
;
1880 newXS_deffile("Socket::unpack_sockaddr_in", XS_Socket_unpack_sockaddr_in)Perl_newXS_deffile( "Socket::unpack_sockaddr_in",XS_Socket_unpack_sockaddr_in
)
;
1881 newXS_deffile("Socket::pack_sockaddr_in6", XS_Socket_pack_sockaddr_in6)Perl_newXS_deffile( "Socket::pack_sockaddr_in6",XS_Socket_pack_sockaddr_in6
)
;
1882 newXS_deffile("Socket::unpack_sockaddr_in6", XS_Socket_unpack_sockaddr_in6)Perl_newXS_deffile( "Socket::unpack_sockaddr_in6",XS_Socket_unpack_sockaddr_in6
)
;
1883 newXS_deffile("Socket::inet_ntop", XS_Socket_inet_ntop)Perl_newXS_deffile( "Socket::inet_ntop",XS_Socket_inet_ntop);
1884 newXS_deffile("Socket::inet_pton", XS_Socket_inet_pton)Perl_newXS_deffile( "Socket::inet_pton",XS_Socket_inet_pton);
1885 newXS_deffile("Socket::pack_ip_mreq", XS_Socket_pack_ip_mreq)Perl_newXS_deffile( "Socket::pack_ip_mreq",XS_Socket_pack_ip_mreq
)
;
1886 newXS_deffile("Socket::unpack_ip_mreq", XS_Socket_unpack_ip_mreq)Perl_newXS_deffile( "Socket::unpack_ip_mreq",XS_Socket_unpack_ip_mreq
)
;
1887 newXS_deffile("Socket::pack_ip_mreq_source", XS_Socket_pack_ip_mreq_source)Perl_newXS_deffile( "Socket::pack_ip_mreq_source",XS_Socket_pack_ip_mreq_source
)
;
1888 newXS_deffile("Socket::unpack_ip_mreq_source", XS_Socket_unpack_ip_mreq_source)Perl_newXS_deffile( "Socket::unpack_ip_mreq_source",XS_Socket_unpack_ip_mreq_source
)
;
1889 newXS_deffile("Socket::pack_ipv6_mreq", XS_Socket_pack_ipv6_mreq)Perl_newXS_deffile( "Socket::pack_ipv6_mreq",XS_Socket_pack_ipv6_mreq
)
;
1890 newXS_deffile("Socket::unpack_ipv6_mreq", XS_Socket_unpack_ipv6_mreq)Perl_newXS_deffile( "Socket::unpack_ipv6_mreq",XS_Socket_unpack_ipv6_mreq
)
;
1891
1892 /* Initialisation Section */
1893
1894#line 2 "./const-xs.inc"
1895 {
1896#if defined(dTHXstruct Perl___notused_struct) && !defined(PERL_NO_GET_CONTEXT)
1897 dTHXstruct Perl___notused_struct;
1898#endif
1899 HV *symbol_table = get_hv("Socket::", GV_ADD)Perl_get_hv( "Socket::",0x01);
1900
1901 static const struct iv_s values_for_iv[] =
1902 {
1903#ifdef AF_802
1904 { "AF_802", 6, AF_802 },
1905#endif
1906#ifdef AF_AAL
1907 { "AF_AAL", 6, AF_AAL },
1908#endif
1909#ifdef AF_APPLETALK16
1910 { "AF_APPLETALK", 12, AF_APPLETALK16 },
1911#endif
1912#ifdef AF_CCITT10
1913 { "AF_CCITT", 8, AF_CCITT10 },
1914#endif
1915#ifdef AF_CHAOS5
1916 { "AF_CHAOS", 8, AF_CHAOS5 },
1917#endif
1918#ifdef AF_CTF
1919 { "AF_CTF", 6, AF_CTF },
1920#endif
1921#ifdef AF_DATAKIT9
1922 { "AF_DATAKIT", 10, AF_DATAKIT9 },
1923#endif
1924#ifdef AF_DECnet12
1925 { "AF_DECnet", 9, AF_DECnet12 },
1926#endif
1927#ifdef AF_DLI13
1928 { "AF_DLI", 6, AF_DLI13 },
1929#endif
1930#ifdef AF_ECMA8
1931 { "AF_ECMA", 7, AF_ECMA8 },
1932#endif
1933#ifdef AF_GOSIP
1934 { "AF_GOSIP", 8, AF_GOSIP },
1935#endif
1936#ifdef AF_HYLINK15
1937 { "AF_HYLINK", 9, AF_HYLINK15 },
1938#endif
1939#ifdef AF_IMPLINK3
1940 { "AF_IMPLINK", 10, AF_IMPLINK3 },
1941#endif
1942#ifdef AF_INET2
1943 { "AF_INET", 7, AF_INET2 },
1944#endif
1945#ifdef AF_INET624
1946 { "AF_INET6", 8, AF_INET624 },
1947#endif
1948#ifdef AF_ISO7
1949 { "AF_ISO", 6, AF_ISO7 },
1950#endif
1951#ifdef AF_KEY30
1952 { "AF_KEY", 6, AF_KEY30 },
1953#endif
1954#ifdef AF_LAST
1955 { "AF_LAST", 7, AF_LAST },
1956#endif
1957#ifdef AF_LAT14
1958 { "AF_LAT", 6, AF_LAT14 },
1959#endif
1960#ifdef AF_LINK18
1961 { "AF_LINK", 7, AF_LINK18 },
1962#endif
1963#ifdef AF_LOCAL1
1964 { "AF_LOCAL", 8, AF_LOCAL1 },
1965#endif
1966#ifdef AF_MAX36
1967 { "AF_MAX", 6, AF_MAX36 },
1968#endif
1969#ifdef AF_NBS
1970 { "AF_NBS", 6, AF_NBS },
1971#endif
1972#ifdef AF_NIT
1973 { "AF_NIT", 6, AF_NIT },
1974#endif
1975#ifdef AF_NS6
1976 { "AF_NS", 5, AF_NS6 },
1977#endif
1978#ifdef AF_OSI7
1979 { "AF_OSI", 6, AF_OSI7 },
1980#endif
1981#ifdef AF_OSINET
1982 { "AF_OSINET", 9, AF_OSINET },
1983#endif
1984#ifdef AF_PUP4
1985 { "AF_PUP", 6, AF_PUP4 },
1986#endif
1987#ifdef AF_ROUTE17
1988 { "AF_ROUTE", 8, AF_ROUTE17 },
1989#endif
1990#ifdef AF_SNA11
1991 { "AF_SNA", 6, AF_SNA11 },
1992#endif
1993#ifdef AF_UNIX1
1994 { "AF_UNIX", 7, AF_UNIX1 },
1995#endif
1996#ifdef AF_UNSPEC0
1997 { "AF_UNSPEC", 9, AF_UNSPEC0 },
1998#endif
1999#ifdef AF_USER
2000 { "AF_USER", 7, AF_USER },
2001#endif
2002#ifdef AF_WAN
2003 { "AF_WAN", 6, AF_WAN },
2004#endif
2005#ifdef AF_X25
2006 { "AF_X25", 6, AF_X25 },
2007#endif
2008#ifdef AI_ADDRCONFIG64
2009 { "AI_ADDRCONFIG", 13, AI_ADDRCONFIG64 },
2010#endif
2011#ifdef AI_ALL
2012 { "AI_ALL", 6, AI_ALL },
2013#endif
2014#ifdef AI_CANONIDN
2015 { "AI_CANONIDN", 11, AI_CANONIDN },
2016#endif
2017#ifdef AI_CANONNAME2
2018 { "AI_CANONNAME", 12, AI_CANONNAME2 },
2019#endif
2020#ifdef AI_IDN
2021 { "AI_IDN", 6, AI_IDN },
2022#endif
2023#ifdef AI_IDN_ALLOW_UNASSIGNED
2024 { "AI_IDN_ALLOW_UNASSIGNED", 23, AI_IDN_ALLOW_UNASSIGNED },
2025#endif
2026#ifdef AI_IDN_USE_STD3_ASCII_RULES
2027 { "AI_IDN_USE_STD3_ASCII_RULES", 27, AI_IDN_USE_STD3_ASCII_RULES },
2028#endif
2029#ifdef AI_NUMERICHOST4
2030 { "AI_NUMERICHOST", 14, AI_NUMERICHOST4 },
2031#endif
2032#ifdef AI_NUMERICSERV16
2033 { "AI_NUMERICSERV", 14, AI_NUMERICSERV16 },
2034#endif
2035#ifdef AI_PASSIVE1
2036 { "AI_PASSIVE", 10, AI_PASSIVE1 },
2037#endif
2038#ifdef AI_V4MAPPED
2039 { "AI_V4MAPPED", 11, AI_V4MAPPED },
2040#endif
2041#ifdef EAI_ADDRFAMILY-9
2042 { "EAI_ADDRFAMILY", 14, EAI_ADDRFAMILY-9 },
2043#endif
2044#ifdef EAI_AGAIN-3
2045 { "EAI_AGAIN", 9, EAI_AGAIN-3 },
2046#endif
2047#ifdef EAI_BADFLAGS-1
2048 { "EAI_BADFLAGS", 12, EAI_BADFLAGS-1 },
2049#endif
2050#ifdef EAI_BADHINTS-12
2051 { "EAI_BADHINTS", 12, EAI_BADHINTS-12 },
2052#endif
2053#ifdef EAI_FAIL-4
2054 { "EAI_FAIL", 8, EAI_FAIL-4 },
2055#endif
2056#ifdef EAI_FAMILY-6
2057 { "EAI_FAMILY", 10, EAI_FAMILY-6 },
2058#endif
2059#ifdef EAI_NODATA-5
2060 { "EAI_NODATA", 10, EAI_NODATA-5 },
2061#endif
2062#ifdef EAI_NONAME-2
2063 { "EAI_NONAME", 10, EAI_NONAME-2 },
2064#endif
2065#ifdef EAI_PROTOCOL-13
2066 { "EAI_PROTOCOL", 12, EAI_PROTOCOL-13 },
2067#endif
2068#ifdef EAI_SERVICE-8
2069 { "EAI_SERVICE", 11, EAI_SERVICE-8 },
2070#endif
2071#ifdef EAI_SOCKTYPE-7
2072 { "EAI_SOCKTYPE", 12, EAI_SOCKTYPE-7 },
2073#endif
2074#ifdef EAI_SYSTEM-11
2075 { "EAI_SYSTEM", 10, EAI_SYSTEM-11 },
2076#endif
2077#ifdef IOV_MAX1024
2078 { "IOV_MAX", 7, IOV_MAX1024 },
2079#endif
2080#ifdef IP_ADD_MEMBERSHIP12
2081 { "IP_ADD_MEMBERSHIP", 17, IP_ADD_MEMBERSHIP12 },
2082#endif
2083#ifdef IP_ADD_SOURCE_MEMBERSHIP
2084 { "IP_ADD_SOURCE_MEMBERSHIP", 24, IP_ADD_SOURCE_MEMBERSHIP },
2085#endif
2086#ifdef IP_BIND_ADDRESS_NO_PORT
2087 { "IP_BIND_ADDRESS_NO_PORT", 23, IP_BIND_ADDRESS_NO_PORT },
2088#endif
2089#ifdef IP_DROP_MEMBERSHIP13
2090 { "IP_DROP_MEMBERSHIP", 18, IP_DROP_MEMBERSHIP13 },
2091#endif
2092#ifdef IP_DROP_SOURCE_MEMBERSHIP
2093 { "IP_DROP_SOURCE_MEMBERSHIP", 25, IP_DROP_SOURCE_MEMBERSHIP },
2094#endif
2095#ifdef IP_FREEBIND
2096 { "IP_FREEBIND", 11, IP_FREEBIND },
2097#endif
2098#ifdef IP_HDRINCL2
2099 { "IP_HDRINCL", 10, IP_HDRINCL2 },
2100#endif
2101#ifdef IP_MULTICAST_ALL
2102 { "IP_MULTICAST_ALL", 16, IP_MULTICAST_ALL },
2103#endif
2104#ifdef IP_MULTICAST_IF9
2105 { "IP_MULTICAST_IF", 15, IP_MULTICAST_IF9 },
2106#endif
2107#ifdef IP_MULTICAST_LOOP11
2108 { "IP_MULTICAST_LOOP", 17, IP_MULTICAST_LOOP11 },
2109#endif
2110#ifdef IP_MULTICAST_TTL10
2111 { "IP_MULTICAST_TTL", 16, IP_MULTICAST_TTL10 },
2112#endif
2113#ifdef IP_MTU
2114 { "IP_MTU", 6, IP_MTU },
2115#endif
2116#ifdef IP_MTU_DISCOVER
2117 { "IP_MTU_DISCOVER", 15, IP_MTU_DISCOVER },
2118#endif
2119#ifdef IP_NODEFRAG
2120 { "IP_NODEFRAG", 11, IP_NODEFRAG },
2121#endif
2122#ifdef IP_OPTIONS1
2123 { "IP_OPTIONS", 10, IP_OPTIONS1 },
2124#endif
2125#ifdef IP_RECVERR
2126 { "IP_RECVERR", 10, IP_RECVERR },
2127#endif
2128#ifdef IP_RECVOPTS5
2129 { "IP_RECVOPTS", 11, IP_RECVOPTS5 },
2130#endif
2131#ifdef IP_RECVRETOPTS6
2132 { "IP_RECVRETOPTS", 14, IP_RECVRETOPTS6 },
2133#endif
2134#ifdef IP_RETOPTS8
2135 { "IP_RETOPTS", 10, IP_RETOPTS8 },
2136#endif
2137#ifdef IP_TOS3
2138 { "IP_TOS", 6, IP_TOS3 },
2139#endif
2140#ifdef IP_TRANSPARENT
2141 { "IP_TRANSPARENT", 14, IP_TRANSPARENT },
2142#endif
2143#ifdef IP_TTL4
2144 { "IP_TTL", 6, IP_TTL4 },
2145#endif
2146#ifdef IP_PMTUDISC_DO
2147 { "IP_PMTUDISC_DO", 14, IP_PMTUDISC_DO },
2148#endif
2149#ifdef IP_PMTUDISC_DONT
2150 { "IP_PMTUDISC_DONT", 16, IP_PMTUDISC_DONT },
2151#endif
2152#ifdef IP_PMTUDISC_PROBE
2153 { "IP_PMTUDISC_PROBE", 17, IP_PMTUDISC_PROBE },
2154#endif
2155#ifdef IP_PMTUDISC_WANT
2156 { "IP_PMTUDISC_WANT", 16, IP_PMTUDISC_WANT },
2157#endif
2158#ifdef IPTOS_LOWDELAY
2159 { "IPTOS_LOWDELAY", 14, IPTOS_LOWDELAY },
2160#endif
2161#ifdef IPTOS_THROUGHPUT
2162 { "IPTOS_THROUGHPUT", 16, IPTOS_THROUGHPUT },
2163#endif
2164#ifdef IPTOS_RELIABILITY
2165 { "IPTOS_RELIABILITY", 17, IPTOS_RELIABILITY },
2166#endif
2167#ifdef IPTOS_MINCOST
2168 { "IPTOS_MINCOST", 13, IPTOS_MINCOST },
2169#endif
2170#ifdef IPV6_ADDRFROM
2171 { "IPV6_ADDRFROM", 13, IPV6_ADDRFROM },
2172#endif
2173#ifdef IPV6_ADD_MEMBERSHIP
2174 { "IPV6_ADD_MEMBERSHIP", 19, IPV6_ADD_MEMBERSHIP },
2175#endif
2176#ifdef IPV6_DROP_MEMBERSHIP
2177 { "IPV6_DROP_MEMBERSHIP", 20, IPV6_DROP_MEMBERSHIP },
2178#endif
2179#ifdef IPV6_JOIN_GROUP12
2180 { "IPV6_JOIN_GROUP", 15, IPV6_JOIN_GROUP12 },
2181#endif
2182#ifdef IPV6_LEAVE_GROUP13
2183 { "IPV6_LEAVE_GROUP", 16, IPV6_LEAVE_GROUP13 },
2184#endif
2185#ifdef IPV6_MTU
2186 { "IPV6_MTU", 8, IPV6_MTU },
2187#endif
2188#ifdef IPV6_MTU_DISCOVER
2189 { "IPV6_MTU_DISCOVER", 17, IPV6_MTU_DISCOVER },
2190#endif
2191#ifdef IPV6_MULTICAST_HOPS10
2192 { "IPV6_MULTICAST_HOPS", 19, IPV6_MULTICAST_HOPS10 },
2193#endif
2194#ifdef IPV6_MULTICAST_IF9
2195 { "IPV6_MULTICAST_IF", 17, IPV6_MULTICAST_IF9 },
2196#endif
2197#ifdef IPV6_MULTICAST_LOOP11
2198 { "IPV6_MULTICAST_LOOP", 19, IPV6_MULTICAST_LOOP11 },
2199#endif
2200#ifdef IPV6_RECVERR
2201 { "IPV6_RECVERR", 12, IPV6_RECVERR },
2202#endif
2203#ifdef IPV6_ROUTER_ALERT
2204 { "IPV6_ROUTER_ALERT", 17, IPV6_ROUTER_ALERT },
2205#endif
2206#ifdef IPV6_UNICAST_HOPS4
2207 { "IPV6_UNICAST_HOPS", 17, IPV6_UNICAST_HOPS4 },
2208#endif
2209#ifdef IPV6_V6ONLY27
2210 { "IPV6_V6ONLY", 11, IPV6_V6ONLY27 },
2211#endif
2212#ifdef MSG_BCAST0x100
2213 { "MSG_BCAST", 9, MSG_BCAST0x100 },
2214#endif
2215#ifdef MSG_BTAG
2216 { "MSG_BTAG", 8, MSG_BTAG },
2217#endif
2218#ifdef MSG_CTLFLAGS
2219 { "MSG_CTLFLAGS", 12, MSG_CTLFLAGS },
2220#endif
2221#ifdef MSG_CTLIGNORE
2222 { "MSG_CTLIGNORE", 13, MSG_CTLIGNORE },
2223#endif
2224#ifdef MSG_DONTWAIT0x80
2225 { "MSG_DONTWAIT", 12, MSG_DONTWAIT0x80 },
2226#endif
2227#ifdef MSG_EOF
2228 { "MSG_EOF", 7, MSG_EOF },
2229#endif
2230#ifdef MSG_EOR0x8
2231 { "MSG_EOR", 7, MSG_EOR0x8 },
2232#endif
2233#ifdef MSG_ERRQUEUE
2234 { "MSG_ERRQUEUE", 12, MSG_ERRQUEUE },
2235#endif
2236#ifdef MSG_ETAG
2237 { "MSG_ETAG", 8, MSG_ETAG },
2238#endif
2239#ifdef MSG_FASTOPEN
2240 { "MSG_FASTOPEN", 12, MSG_FASTOPEN },
2241#endif
2242#ifdef MSG_FIN
2243 { "MSG_FIN", 7, MSG_FIN },
2244#endif
2245#ifdef MSG_MAXIOVLEN
2246 { "MSG_MAXIOVLEN", 13, MSG_MAXIOVLEN },
2247#endif
2248#ifdef MSG_MCAST0x200
2249 { "MSG_MCAST", 9, MSG_MCAST0x200 },
2250#endif
2251#ifdef MSG_NOSIGNAL0x400
2252 { "MSG_NOSIGNAL", 12, MSG_NOSIGNAL0x400 },
2253#endif
2254#ifdef MSG_RST
2255 { "MSG_RST", 7, MSG_RST },
2256#endif
2257#ifdef MSG_SYN
2258 { "MSG_SYN", 7, MSG_SYN },
2259#endif
2260#ifdef MSG_TRUNC0x10
2261 { "MSG_TRUNC", 9, MSG_TRUNC0x10 },
2262#endif
2263#ifdef MSG_URG
2264 { "MSG_URG", 7, MSG_URG },
2265#endif
2266#ifdef MSG_WAITALL0x40
2267 { "MSG_WAITALL", 11, MSG_WAITALL0x40 },
2268#endif
2269#ifdef MSG_WIRE
2270 { "MSG_WIRE", 8, MSG_WIRE },
2271#endif
2272#ifdef NI_DGRAM16
2273 { "NI_DGRAM", 8, NI_DGRAM16 },
2274#endif
2275#ifdef NI_IDN
2276 { "NI_IDN", 6, NI_IDN },
2277#endif
2278#ifdef NI_IDN_ALLOW_UNASSIGNED
2279 { "NI_IDN_ALLOW_UNASSIGNED", 23, NI_IDN_ALLOW_UNASSIGNED },
2280#endif
2281#ifdef NI_IDN_USE_STD3_ASCII_RULES
2282 { "NI_IDN_USE_STD3_ASCII_RULES", 27, NI_IDN_USE_STD3_ASCII_RULES },
2283#endif
2284#ifdef NI_NAMEREQD8
2285 { "NI_NAMEREQD", 11, NI_NAMEREQD8 },
2286#endif
2287#ifdef NI_NOFQDN4
2288 { "NI_NOFQDN", 9, NI_NOFQDN4 },
2289#endif
2290#ifdef NI_NUMERICHOST1
2291 { "NI_NUMERICHOST", 14, NI_NUMERICHOST1 },
2292#endif
2293#ifdef NI_NUMERICSERV2
2294 { "NI_NUMERICSERV", 14, NI_NUMERICSERV2 },
2295#endif
2296#ifdef PF_802
2297 { "PF_802", 6, PF_802 },
2298#endif
2299#ifdef PF_AAL
2300 { "PF_AAL", 6, PF_AAL },
2301#endif
2302#ifdef PF_APPLETALK16
2303 { "PF_APPLETALK", 12, PF_APPLETALK16 },
2304#endif
2305#ifdef PF_CCITT10
2306 { "PF_CCITT", 8, PF_CCITT10 },
2307#endif
2308#ifdef PF_CHAOS5
2309 { "PF_CHAOS", 8, PF_CHAOS5 },
2310#endif
2311#ifdef PF_CTF
2312 { "PF_CTF", 6, PF_CTF },
2313#endif
2314#ifdef PF_DATAKIT9
2315 { "PF_DATAKIT", 10, PF_DATAKIT9 },
2316#endif
2317#ifdef PF_DECnet12
2318 { "PF_DECnet", 9, PF_DECnet12 },
2319#endif
2320#ifdef PF_DLI13
2321 { "PF_DLI", 6, PF_DLI13 },
2322#endif
2323#ifdef PF_ECMA8
2324 { "PF_ECMA", 7, PF_ECMA8 },
2325#endif
2326#ifdef PF_GOSIP
2327 { "PF_GOSIP", 8, PF_GOSIP },
2328#endif
2329#ifdef PF_HYLINK15
2330 { "PF_HYLINK", 9, PF_HYLINK15 },
2331#endif
2332#ifdef PF_IMPLINK3
2333 { "PF_IMPLINK", 10, PF_IMPLINK3 },
2334#endif
2335#ifdef PF_INET2
2336 { "PF_INET", 7, PF_INET2 },
2337#endif
2338#ifdef PF_INET624
2339 { "PF_INET6", 8, PF_INET624 },
2340#endif
2341#ifdef PF_ISO7
2342 { "PF_ISO", 6, PF_ISO7 },
2343#endif
2344#ifdef PF_KEY30
2345 { "PF_KEY", 6, PF_KEY30 },
2346#endif
2347#ifdef PF_LAST
2348 { "PF_LAST", 7, PF_LAST },
2349#endif
2350#ifdef PF_LAT14
2351 { "PF_LAT", 6, PF_LAT14 },
2352#endif
2353#ifdef PF_LINK18
2354 { "PF_LINK", 7, PF_LINK18 },
2355#endif
2356#ifdef PF_LOCAL1
2357 { "PF_LOCAL", 8, PF_LOCAL1 },
2358#endif
2359#ifdef PF_MAX36
2360 { "PF_MAX", 6, PF_MAX36 },
2361#endif
2362#ifdef PF_NBS
2363 { "PF_NBS", 6, PF_NBS },
2364#endif
2365#ifdef PF_NIT
2366 { "PF_NIT", 6, PF_NIT },
2367#endif
2368#ifdef PF_NS6
2369 { "PF_NS", 5, PF_NS6 },
2370#endif
2371#ifdef PF_OSI7
2372 { "PF_OSI", 6, PF_OSI7 },
2373#endif
2374#ifdef PF_OSINET
2375 { "PF_OSINET", 9, PF_OSINET },
2376#endif
2377#ifdef PF_PUP4
2378 { "PF_PUP", 6, PF_PUP4 },
2379#endif
2380#ifdef PF_ROUTE17
2381 { "PF_ROUTE", 8, PF_ROUTE17 },
2382#endif
2383#ifdef PF_SNA11
2384 { "PF_SNA", 6, PF_SNA11 },
2385#endif
2386#ifdef PF_UNIX1
2387 { "PF_UNIX", 7, PF_UNIX1 },
2388#endif
2389#ifdef PF_UNSPEC0
2390 { "PF_UNSPEC", 9, PF_UNSPEC0 },
2391#endif
2392#ifdef PF_USER
2393 { "PF_USER", 7, PF_USER },
2394#endif
2395#ifdef PF_WAN
2396 { "PF_WAN", 6, PF_WAN },
2397#endif
2398#ifdef PF_X25
2399 { "PF_X25", 6, PF_X25 },
2400#endif
2401#ifdef SCM_CONNECT
2402 { "SCM_CONNECT", 11, SCM_CONNECT },
2403#endif
2404#ifdef SCM_CREDENTIALS
2405 { "SCM_CREDENTIALS", 15, SCM_CREDENTIALS },
2406#endif
2407#ifdef SCM_CREDS
2408 { "SCM_CREDS", 9, SCM_CREDS },
2409#endif
2410#ifdef SCM_TIMESTAMP0x04
2411 { "SCM_TIMESTAMP", 13, SCM_TIMESTAMP0x04 },
2412#endif
2413#ifdef SOCK_DGRAM2
2414 { "SOCK_DGRAM", 10, SOCK_DGRAM2 },
2415#endif
2416#ifdef SOCK_RAW3
2417 { "SOCK_RAW", 8, SOCK_RAW3 },
2418#endif
2419#ifdef SOCK_RDM4
2420 { "SOCK_RDM", 8, SOCK_RDM4 },
2421#endif
2422#ifdef SOCK_SEQPACKET5
2423 { "SOCK_SEQPACKET", 14, SOCK_SEQPACKET5 },
2424#endif
2425#ifdef SOCK_STREAM1
2426 { "SOCK_STREAM", 11, SOCK_STREAM1 },
2427#endif
2428#ifdef SOCK_NONBLOCK0x4000
2429 { "SOCK_NONBLOCK", 13, SOCK_NONBLOCK0x4000 },
2430#endif
2431#ifdef SOCK_CLOEXEC0x8000
2432 { "SOCK_CLOEXEC", 12, SOCK_CLOEXEC0x8000 },
2433#endif
2434#ifdef SOL_SOCKET0xffff
2435 { "SOL_SOCKET", 10, SOL_SOCKET0xffff },
2436#endif
2437#ifdef SOMAXCONN128
2438 { "SOMAXCONN", 9, SOMAXCONN128 },
2439#endif
2440#ifdef SO_ACCEPTCONN0x0002
2441 { "SO_ACCEPTCONN", 13, SO_ACCEPTCONN0x0002 },
2442#endif
2443#ifdef SO_ATTACH_FILTER
2444 { "SO_ATTACH_FILTER", 16, SO_ATTACH_FILTER },
2445#endif
2446#ifdef SO_BACKLOG
2447 { "SO_BACKLOG", 10, SO_BACKLOG },
2448#endif
2449#ifdef SO_BINDTODEVICE
2450 { "SO_BINDTODEVICE", 15, SO_BINDTODEVICE },
2451#endif
2452#ifdef SO_BROADCAST0x0020
2453 { "SO_BROADCAST", 12, SO_BROADCAST0x0020 },
2454#endif
2455#ifdef SO_BSDCOMPAT
2456 { "SO_BSDCOMPAT", 12, SO_BSDCOMPAT },
2457#endif
2458#ifdef SO_BUSY_POLL
2459 { "SO_BUSY_POLL", 12, SO_BUSY_POLL },
2460#endif
2461#ifdef SO_CHAMELEON
2462 { "SO_CHAMELEON", 12, SO_CHAMELEON },
2463#endif
2464#ifdef SO_DEBUG0x0001
2465 { "SO_DEBUG", 8, SO_DEBUG0x0001 },
2466#endif
2467#ifdef SO_DETACH_FILTER
2468 { "SO_DETACH_FILTER", 16, SO_DETACH_FILTER },
2469#endif
2470#ifdef SO_DGRAM_ERRIND
2471 { "SO_DGRAM_ERRIND", 15, SO_DGRAM_ERRIND },
2472#endif
2473#ifdef SO_DOMAIN0x1024
2474 { "SO_DOMAIN", 9, SO_DOMAIN0x1024 },
2475#endif
2476#ifdef SO_DONTLINGER
2477 { "SO_DONTLINGER", 13, SO_DONTLINGER },
2478#endif
2479#ifdef SO_DONTROUTE0x0010
2480 { "SO_DONTROUTE", 12, SO_DONTROUTE0x0010 },
2481#endif
2482#ifdef SO_ERROR0x1007
2483 { "SO_ERROR", 8, SO_ERROR0x1007 },
2484#endif
2485#ifdef SO_FAMILY
2486 { "SO_FAMILY", 9, SO_FAMILY },
2487#endif
2488#ifdef SO_KEEPALIVE0x0008
2489 { "SO_KEEPALIVE", 12, SO_KEEPALIVE0x0008 },
2490#endif
2491#ifdef SO_LINGER0x0080
2492 { "SO_LINGER", 9, SO_LINGER0x0080 },
2493#endif
2494#ifdef SO_LOCK_FILTER
2495 { "SO_LOCK_FILTER", 14, SO_LOCK_FILTER },
2496#endif
2497#ifdef SO_MARK
2498 { "SO_MARK", 7, SO_MARK },
2499#endif
2500#ifdef SO_OOBINLINE0x0100
2501 { "SO_OOBINLINE", 12, SO_OOBINLINE0x0100 },
2502#endif
2503#ifdef SO_PASSCRED
2504 { "SO_PASSCRED", 11, SO_PASSCRED },
2505#endif
2506#ifdef SO_PASSIFNAME
2507 { "SO_PASSIFNAME", 13, SO_PASSIFNAME },
2508#endif
2509#ifdef SO_PEEK_OFF
2510 { "SO_PEEK_OFF", 11, SO_PEEK_OFF },
2511#endif
2512#ifdef SO_PEERCRED0x1022
2513 { "SO_PEERCRED", 11, SO_PEERCRED0x1022 },
2514#endif
2515#ifdef SO_PRIORITY
2516 { "SO_PRIORITY", 11, SO_PRIORITY },
2517#endif
2518#ifdef SO_PROTOCOL0x1025
2519 { "SO_PROTOCOL", 11, SO_PROTOCOL0x1025 },
2520#endif
2521#ifdef SO_PROTOTYPE
2522 { "SO_PROTOTYPE", 12, SO_PROTOTYPE },
2523#endif
2524#ifdef SO_RCVBUF0x1002
2525 { "SO_RCVBUF", 9, SO_RCVBUF0x1002 },
2526#endif
2527#ifdef SO_RCVBUFFORCE
2528 { "SO_RCVBUFFORCE", 14, SO_RCVBUFFORCE },
2529#endif
2530#ifdef SO_RCVLOWAT0x1004
2531 { "SO_RCVLOWAT", 11, SO_RCVLOWAT0x1004 },
2532#endif
2533#ifdef SO_RCVTIMEO0x1006
2534 { "SO_RCVTIMEO", 11, SO_RCVTIMEO0x1006 },
2535#endif
2536#ifdef SO_REUSEADDR0x0004
2537 { "SO_REUSEADDR", 12, SO_REUSEADDR0x0004 },
2538#endif
2539#ifdef SO_REUSEPORT0x0200
2540 { "SO_REUSEPORT", 12, SO_REUSEPORT0x0200 },
2541#endif
2542#ifdef SO_RXQ_OVFL
2543 { "SO_RXQ_OVFL", 11, SO_RXQ_OVFL },
2544#endif
2545#ifdef SO_SECURITY_AUTHENTICATION
2546 { "SO_SECURITY_AUTHENTICATION", 26, SO_SECURITY_AUTHENTICATION },
2547#endif
2548#ifdef SO_SECURITY_ENCRYPTION_NETWORK
2549 { "SO_SECURITY_ENCRYPTION_NETWORK", 30, SO_SECURITY_ENCRYPTION_NETWORK },
2550#endif
2551#ifdef SO_SECURITY_ENCRYPTION_TRANSPORT
2552 { "SO_SECURITY_ENCRYPTION_TRANSPORT", 32, SO_SECURITY_ENCRYPTION_TRANSPORT },
2553#endif
2554#ifdef SO_SNDBUF0x1001
2555 { "SO_SNDBUF", 9, SO_SNDBUF0x1001 },
2556#endif
2557#ifdef SO_SNDBUFFORCE
2558 { "SO_SNDBUFFORCE", 14, SO_SNDBUFFORCE },
2559#endif
2560#ifdef SO_SNDLOWAT0x1003
2561 { "SO_SNDLOWAT", 11, SO_SNDLOWAT0x1003 },
2562#endif
2563#ifdef SO_SNDTIMEO0x1005
2564 { "SO_SNDTIMEO", 11, SO_SNDTIMEO0x1005 },
2565#endif
2566#ifdef SO_STATE
2567 { "SO_STATE", 8, SO_STATE },
2568#endif
2569#ifdef SO_TIMESTAMP0x0800
2570 { "SO_TIMESTAMP", 12, SO_TIMESTAMP0x0800 },
2571#endif
2572#ifdef SO_TYPE0x1008
2573 { "SO_TYPE", 7, SO_TYPE0x1008 },
2574#endif
2575#ifdef SO_USELOOPBACK0x0040
2576 { "SO_USELOOPBACK", 14, SO_USELOOPBACK0x0040 },
2577#endif
2578#ifdef SO_XOPEN
2579 { "SO_XOPEN", 8, SO_XOPEN },
2580#endif
2581#ifdef SO_XSE
2582 { "SO_XSE", 6, SO_XSE },
2583#endif
2584#ifdef TCP_CONGESTION
2585 { "TCP_CONGESTION", 14, TCP_CONGESTION },
2586#endif
2587#ifdef TCP_CONNECTIONTIMEOUT
2588 { "TCP_CONNECTIONTIMEOUT", 21, TCP_CONNECTIONTIMEOUT },
2589#endif
2590#ifdef TCP_CORK
2591 { "TCP_CORK", 8, TCP_CORK },
2592#endif
2593#ifdef TCP_DEFER_ACCEPT
2594 { "TCP_DEFER_ACCEPT", 16, TCP_DEFER_ACCEPT },
2595#endif
2596#ifdef TCP_FASTOPEN
2597 { "TCP_FASTOPEN", 12, TCP_FASTOPEN },
2598#endif
2599#ifdef TCP_INFO
2600 { "TCP_INFO", 8, TCP_INFO },
2601#endif
2602#ifdef TCP_INIT_CWND
2603 { "TCP_INIT_CWND", 13, TCP_INIT_CWND },
2604#endif
2605#ifdef TCP_KEEPALIVE
2606 { "TCP_KEEPALIVE", 13, TCP_KEEPALIVE },
2607#endif
2608#ifdef TCP_KEEPCNT
2609 { "TCP_KEEPCNT", 11, TCP_KEEPCNT },
2610#endif
2611#ifdef TCP_KEEPIDLE
2612 { "TCP_KEEPIDLE", 12, TCP_KEEPIDLE },
2613#endif
2614#ifdef TCP_KEEPINTVL
2615 { "TCP_KEEPINTVL", 13, TCP_KEEPINTVL },
2616#endif
2617#ifdef TCP_LINGER2
2618 { "TCP_LINGER2", 11, TCP_LINGER2 },
2619#endif
2620#ifdef TCP_MAXRT
2621 { "TCP_MAXRT", 9, TCP_MAXRT },
2622#endif
2623#ifdef TCP_MAXSEG0x02
2624 { "TCP_MAXSEG", 10, TCP_MAXSEG0x02 },
2625#endif
2626#ifdef TCP_MD5SIG0x04
2627 { "TCP_MD5SIG", 10, TCP_MD5SIG0x04 },
2628#endif
2629#ifdef TCP_NODELAY0x01
2630 { "TCP_NODELAY", 11, TCP_NODELAY0x01 },
2631#endif
2632#ifdef TCP_NOOPT
2633 { "TCP_NOOPT", 9, TCP_NOOPT },
2634#endif
2635#ifdef TCP_NOPUSH0x10
2636 { "TCP_NOPUSH", 10, TCP_NOPUSH0x10 },
2637#endif
2638#ifdef TCP_QUICKACK
2639 { "TCP_QUICKACK", 12, TCP_QUICKACK },
2640#endif
2641#ifdef TCP_SACK_ENABLE0x08
2642 { "TCP_SACK_ENABLE", 15, TCP_SACK_ENABLE0x08 },
2643#endif
2644#ifdef TCP_STDURG
2645 { "TCP_STDURG", 10, TCP_STDURG },
2646#endif
2647#ifdef TCP_SYNCNT
2648 { "TCP_SYNCNT", 10, TCP_SYNCNT },
2649#endif
2650#ifdef TCP_USER_TIMEOUT
2651 { "TCP_USER_TIMEOUT", 16, TCP_USER_TIMEOUT },
2652#endif
2653#ifdef TCP_WINDOW_CLAMP
2654 { "TCP_WINDOW_CLAMP", 16, TCP_WINDOW_CLAMP },
2655#endif
2656#ifdef UIO_MAXIOV1024
2657 { "UIO_MAXIOV", 10, UIO_MAXIOV1024 },
2658#endif
2659#ifdef IPPROTO_IP0
2660 { "IPPROTO_IP", 10, IPPROTO_IP0 },
2661#endif
2662#ifdef IPPROTO_IPV641
2663 { "IPPROTO_IPV6", 12, IPPROTO_IPV641 },
2664#endif
2665#ifdef IPPROTO_RAW255
2666 { "IPPROTO_RAW", 11, IPPROTO_RAW255 },
2667#endif
2668#ifdef IPPROTO_ICMP1
2669 { "IPPROTO_ICMP", 12, IPPROTO_ICMP1 },
2670#endif
2671#ifdef IPPROTO_IGMP2
2672 { "IPPROTO_IGMP", 12, IPPROTO_IGMP2 },
2673#endif
2674#ifdef IPPROTO_TCP6
2675 { "IPPROTO_TCP", 11, IPPROTO_TCP6 },
2676#endif
2677#ifdef IPPROTO_UDP17
2678 { "IPPROTO_UDP", 11, IPPROTO_UDP17 },
2679#endif
2680#ifdef IPPROTO_GRE47
2681 { "IPPROTO_GRE", 11, IPPROTO_GRE47 },
2682#endif
2683#ifdef IPPROTO_ESP50
2684 { "IPPROTO_ESP", 11, IPPROTO_ESP50 },
2685#endif
2686#ifdef IPPROTO_AH51
2687 { "IPPROTO_AH", 10, IPPROTO_AH51 },
2688#endif
2689#ifdef IPPROTO_ICMPV658
2690 { "IPPROTO_ICMPV6", 14, IPPROTO_ICMPV658 },
2691#endif
2692#ifdef IPPROTO_SCTP132
2693 { "IPPROTO_SCTP", 12, IPPROTO_SCTP132 },
2694#endif
2695#ifdef SHUT_RD0
2696 { "SHUT_RD", 7, SHUT_RD0 },
2697#endif
2698#ifdef SHUT_WR1
2699 { "SHUT_WR", 7, SHUT_WR1 },
2700#endif
2701#ifdef SHUT_RDWR2
2702 { "SHUT_RDWR", 9, SHUT_RDWR2 },
2703#endif
2704#if defined(MSG_CTRUNC0x20) || defined(HAS_MSG_CTRUNC) /* might be an enum */
2705 { "MSG_CTRUNC", 10, MSG_CTRUNC0x20 },
2706#endif
2707#if defined(MSG_DONTROUTE0x4) || defined(HAS_MSG_DONTROUTE) /* might be an enum */
2708 { "MSG_DONTROUTE", 13, MSG_DONTROUTE0x4 },
2709#endif
2710#if defined(MSG_OOB0x1) || defined(HAS_MSG_OOB) /* might be an enum */
2711 { "MSG_OOB", 7, MSG_OOB0x1 },
2712#endif
2713#if defined(MSG_PEEK0x2) || defined(HAS_MSG_PEEK) /* might be an enum */
2714 { "MSG_PEEK", 8, MSG_PEEK0x2 },
2715#endif
2716#if defined(MSG_PROXY) || defined(HAS_MSG_PROXY) /* might be an enum */
2717 { "MSG_PROXY", 9, MSG_PROXY },
2718#endif
2719#if defined(SCM_RIGHTS0x01) || defined(HAS_SCM_RIGHTS) /* might be an enum */
2720 { "SCM_RIGHTS", 10, SCM_RIGHTS0x01 },
2721#endif
2722#ifndef IPPROTO_IP0
2723 /* This is the default value: */
2724 { "IPPROTO_IP", 10, 0 },
2725#endif
2726#ifndef IPPROTO_IPV641
2727 /* This is the default value: */
2728 { "IPPROTO_IPV6", 12, 41 },
2729#endif
2730#ifndef IPPROTO_RAW255
2731 /* This is the default value: */
2732 { "IPPROTO_RAW", 11, 255 },
2733#endif
2734#ifndef IPPROTO_ICMP1
2735 /* This is the default value: */
2736 { "IPPROTO_ICMP", 12, 1 },
2737#endif
2738#ifndef IPPROTO_IGMP2
2739 /* This is the default value: */
2740 { "IPPROTO_IGMP", 12, 2 },
2741#endif
2742#ifndef IPPROTO_TCP6
2743 /* This is the default value: */
2744 { "IPPROTO_TCP", 11, 6 },
2745#endif
2746#ifndef IPPROTO_UDP17
2747 /* This is the default value: */
2748 { "IPPROTO_UDP", 11, 17 },
2749#endif
2750#ifndef IPPROTO_GRE47
2751 /* This is the default value: */
2752 { "IPPROTO_GRE", 11, 47 },
2753#endif
2754#ifndef IPPROTO_ESP50
2755 /* This is the default value: */
2756 { "IPPROTO_ESP", 11, 50 },
2757#endif
2758#ifndef IPPROTO_AH51
2759 /* This is the default value: */
2760 { "IPPROTO_AH", 10, 51 },
2761#endif
2762#ifndef IPPROTO_ICMPV658
2763 /* This is the default value: */
2764 { "IPPROTO_ICMPV6", 14, 58 },
2765#endif
2766#ifndef IPPROTO_SCTP132
2767 /* This is the default value: */
2768 { "IPPROTO_SCTP", 12, 132 },
2769#endif
2770#ifndef SHUT_RD0
2771 /* This is the default value: */
2772 { "SHUT_RD", 7, 0 },
2773#endif
2774#ifndef SHUT_WR1
2775 /* This is the default value: */
2776 { "SHUT_WR", 7, 1 },
2777#endif
2778#ifndef SHUT_RDWR2
2779 /* This is the default value: */
2780 { "SHUT_RDWR", 9, 2 },
2781#endif
2782 { NULL((void*)0), 0, 0 } };
2783 const struct iv_s *value_for_iv = values_for_iv;
2784 while (value_for_iv->name) {
2785 constant_add_symbol(aTHX_ symbol_table, value_for_iv->name,
2786 value_for_iv->namelen, newSViv(value_for_iv->value)Perl_newSViv( value_for_iv->value));
2787 ++value_for_iv;
2788 }
2789 if (C_ARRAY_LENGTH(values_for_notfound)(sizeof(values_for_notfound)/sizeof((values_for_notfound)[0])
)
> 1) {
2790#ifndef SYMBIAN
2791 HV *const constant_missing = get_missing_hash(aTHX);
2792#endif
2793 const struct notfound_s *value_for_notfound = values_for_notfound;
2794 do {
2795
2796 /* Need to add prototypes, else parsing will vary by platform. */
2797 HE *he = (HE*) hv_common_key_len(symbol_table,Perl_hv_common_key_len( symbol_table,value_for_notfound->name
,value_for_notfound->namelen,0x10,((void*)0),0)
2798 value_for_notfound->name,Perl_hv_common_key_len( symbol_table,value_for_notfound->name
,value_for_notfound->namelen,0x10,((void*)0),0)
2799 value_for_notfound->namelen,Perl_hv_common_key_len( symbol_table,value_for_notfound->name
,value_for_notfound->namelen,0x10,((void*)0),0)
2800 HV_FETCH_LVALUE, NULL, 0)Perl_hv_common_key_len( symbol_table,value_for_notfound->name
,value_for_notfound->namelen,0x10,((void*)0),0)
;
2801 SV *sv;
2802#ifndef SYMBIAN
2803 HEK *hek;
2804#endif
2805 if (!he) {
2806 croakPerl_croak("Couldn't add key '%s' to %%Socket::",
2807 value_for_notfound->name);
2808 }
2809 sv = HeVAL(he)(he)->he_valu.hent_val;
2810 if (!SvOK(sv)((sv)->sv_flags & (0x00000100|0x00000200|0x00000400|0x00000800
| 0x00001000|0x00002000|0x00004000|0x00008000))
&& SvTYPE(sv)((svtype)((sv)->sv_flags & 0xff)) != SVt_PVGV) {
2811 /* Nothing was here before, so mark a prototype of "" */
2812 sv_setpvn(sv, "", 0)Perl_sv_setpvn( sv,"",0);
2813 } else if (SvPOK(sv)((sv)->sv_flags & 0x00000400) && SvCUR(sv)((XPV*) (sv)->sv_any)->xpv_cur == 0) {
2814 /* There is already a prototype of "" - do nothing */
2815 } else {
2816 /* Someone has been here before us - have to make a real
2817 typeglob. */
2818 /* It turns out to be incredibly hard to deal with all the
2819 corner cases of sub foo (); and reporting errors correctly,
2820 so lets cheat a bit. Start with a constant subroutine */
2821 CV *cv = newCONSTSUB(symbol_table,Perl_newCONSTSUB( symbol_table,value_for_notfound->name,&
(PL_sv_immortals[0]))
2822 value_for_notfound->name,Perl_newCONSTSUB( symbol_table,value_for_notfound->name,&
(PL_sv_immortals[0]))
2823 &PL_sv_yes)Perl_newCONSTSUB( symbol_table,value_for_notfound->name,&
(PL_sv_immortals[0]))
;
2824 /* and then turn it into a non constant declaration only. */
2825 SvREFCNT_dec(CvXSUBANY(cv).any_ptr)Perl_SvREFCNT_dec( ((SV *)({ void *_p = (((XPVCV*)({ void *_p
= ((cv)->sv_any); _p; }))->xcv_start_u.xcv_xsubany.any_ptr
); _p; })))
;
2826 CvCONST_off(cv)(((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }))->xcv_flags
&= ~0x0004)
;
2827 CvXSUB(cv)((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }))->xcv_root_u
.xcv_xsub
= NULL((void*)0);
2828 CvXSUBANY(cv)((XPVCV*)({ void *_p = ((cv)->sv_any); _p; }))->xcv_start_u
.xcv_xsubany
.any_ptr = NULL((void*)0);
2829 }
2830#ifndef SYMBIAN
2831 hek = HeKEY_hek(he)(he)->hent_hek;
2832 if (!hv_common(constant_missing, NULL, HEK_KEY(hek),Perl_hv_common( constant_missing,((void*)0),(hek)->hek_key
,(hek)->hek_len,(*((unsigned char *)((hek)->hek_key)+(hek
)->hek_len+1)),0x04,&(PL_sv_immortals[0]),(hek)->hek_hash
)
2833 HEK_LEN(hek), HEK_FLAGS(hek), HV_FETCH_ISSTORE,Perl_hv_common( constant_missing,((void*)0),(hek)->hek_key
,(hek)->hek_len,(*((unsigned char *)((hek)->hek_key)+(hek
)->hek_len+1)),0x04,&(PL_sv_immortals[0]),(hek)->hek_hash
)
2834 &PL_sv_yes, HEK_HASH(hek))Perl_hv_common( constant_missing,((void*)0),(hek)->hek_key
,(hek)->hek_len,(*((unsigned char *)((hek)->hek_key)+(hek
)->hek_len+1)),0x04,&(PL_sv_immortals[0]),(hek)->hek_hash
)
)
2835 croakPerl_croak("Couldn't add key '%s' to missing_hash",
2836 value_for_notfound->name);
2837#endif
2838 } while ((++value_for_notfound)->name);
2839 }
2840#ifdef INADDR_ANY((u_int32_t)(0x00000000))
2841 {
2842 SV * temp0;
2843 struct in_addr ip_address; ip_address.s_addr = htonl(INADDR_ANY)(__uint32_t)(__builtin_constant_p(((u_int32_t)(0x00000000))) ?
(__uint32_t)(((__uint32_t)(((u_int32_t)(0x00000000))) & 0xff
) << 24 | ((__uint32_t)(((u_int32_t)(0x00000000))) &
0xff00) << 8 | ((__uint32_t)(((u_int32_t)(0x00000000))
) & 0xff0000) >> 8 | ((__uint32_t)(((u_int32_t)(0x00000000
))) & 0xff000000) >> 24) : __swap32md(((u_int32_t)(
0x00000000))))
;
2844 temp0 = newSVpvn_flags((char *)&ip_address,sizeof(ip_address), SVs_TEMP)Perl_newSVpvn_flags( (char *)&ip_address,sizeof(ip_address
),0x00080000)
;
2845 constant_add_symbol(aTHX_ symbol_table, "INADDR_ANY",
2846 10, SvREFCNT_inc(temp0)Perl_SvREFCNT_inc(((SV *)({ void *_p = (temp0); _p; }))));
2847 }
2848#endif
2849#ifdef INADDR_LOOPBACK((u_int32_t)(0x7f000001))
2850 {
2851 SV * temp0;
2852 struct in_addr ip_address; ip_address.s_addr = htonl(INADDR_LOOPBACK)(__uint32_t)(__builtin_constant_p(((u_int32_t)(0x7f000001))) ?
(__uint32_t)(((__uint32_t)(((u_int32_t)(0x7f000001))) & 0xff
) << 24 | ((__uint32_t)(((u_int32_t)(0x7f000001))) &
0xff00) << 8 | ((__uint32_t)(((u_int32_t)(0x7f000001))
) & 0xff0000) >> 8 | ((__uint32_t)(((u_int32_t)(0x7f000001
))) & 0xff000000) >> 24) : __swap32md(((u_int32_t)(
0x7f000001))))
;
2853 temp0 = newSVpvn_flags((char *)&ip_address,sizeof(ip_address), SVs_TEMP)Perl_newSVpvn_flags( (char *)&ip_address,sizeof(ip_address
),0x00080000)
;
2854 constant_add_symbol(aTHX_ symbol_table, "INADDR_LOOPBACK",
2855 15, SvREFCNT_inc(temp0)Perl_SvREFCNT_inc(((SV *)({ void *_p = (temp0); _p; }))));
2856 }
2857#endif
2858#ifdef INADDR_NONE((u_int32_t)(0xffffffff))
2859 {
2860 SV * temp0;
2861 struct in_addr ip_address; ip_address.s_addr = htonl(INADDR_NONE)(__uint32_t)(__builtin_constant_p(((u_int32_t)(0xffffffff))) ?
(__uint32_t)(((__uint32_t)(((u_int32_t)(0xffffffff))) & 0xff
) << 24 | ((__uint32_t)(((u_int32_t)(0xffffffff))) &
0xff00) << 8 | ((__uint32_t)(((u_int32_t)(0xffffffff))
) & 0xff0000) >> 8 | ((__uint32_t)(((u_int32_t)(0xffffffff
))) & 0xff000000) >> 24) : __swap32md(((u_int32_t)(
0xffffffff))))
;
2862 temp0 = newSVpvn_flags((char *)&ip_address,sizeof(ip_address), SVs_TEMP)Perl_newSVpvn_flags( (char *)&ip_address,sizeof(ip_address
),0x00080000)
;
2863 constant_add_symbol(aTHX_ symbol_table, "INADDR_NONE",
2864 11, SvREFCNT_inc(temp0)Perl_SvREFCNT_inc(((SV *)({ void *_p = (temp0); _p; }))));
2865 }
2866#endif
2867#ifdef INADDR_BROADCAST((u_int32_t)(0xffffffff))
2868 {
2869 SV * temp0;
2870 struct in_addr ip_address; ip_address.s_addr = htonl(INADDR_BROADCAST)(__uint32_t)(__builtin_constant_p(((u_int32_t)(0xffffffff))) ?
(__uint32_t)(((__uint32_t)(((u_int32_t)(0xffffffff))) & 0xff
) << 24 | ((__uint32_t)(((u_int32_t)(0xffffffff))) &
0xff00) << 8 | ((__uint32_t)(((u_int32_t)(0xffffffff))
) & 0xff0000) >> 8 | ((__uint32_t)(((u_int32_t)(0xffffffff
))) & 0xff000000) >> 24) : __swap32md(((u_int32_t)(
0xffffffff))))
;
2871 temp0 = newSVpvn_flags((char *)&ip_address,sizeof(ip_address), SVs_TEMP)Perl_newSVpvn_flags( (char *)&ip_address,sizeof(ip_address
),0x00080000)
;
2872 constant_add_symbol(aTHX_ symbol_table, "INADDR_BROADCAST",
2873 16, SvREFCNT_inc(temp0)Perl_SvREFCNT_inc(((SV *)({ void *_p = (temp0); _p; }))));
2874 }
2875#endif
2876#ifdef IN6ADDR_ANY_INIT{{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
2877 {
2878 SV * temp0;
2879 struct in6_addr ip6_address = IN6ADDR_ANY_INIT{{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
;
2880 temp0 = newSVpvn_flags((char *)&ip6_address,sizeof(ip6_address), SVs_TEMP)Perl_newSVpvn_flags( (char *)&ip6_address,sizeof(ip6_address
),0x00080000)
;
2881 constant_add_symbol(aTHX_ symbol_table, "IN6ADDR_ANY",
2882 11, SvREFCNT_inc(temp0)Perl_SvREFCNT_inc(((SV *)({ void *_p = (temp0); _p; }))));
2883 }
2884#endif
2885#ifdef IN6ADDR_LOOPBACK_INIT{{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
2886 {
2887 SV * temp0;
2888 struct in6_addr ip6_address = IN6ADDR_LOOPBACK_INIT{{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
;
2889 temp0 = newSVpvn_flags((char *)&ip6_address,sizeof(ip6_address), SVs_TEMP)Perl_newSVpvn_flags( (char *)&ip6_address,sizeof(ip6_address
),0x00080000)
;
2890 constant_add_symbol(aTHX_ symbol_table, "IN6ADDR_LOOPBACK",
2891 16, SvREFCNT_inc(temp0)Perl_SvREFCNT_inc(((SV *)({ void *_p = (temp0); _p; }))));
2892 }
2893#endif
2894 /* As we've been creating subroutines, we better invalidate any cached
2895 methods */
2896 mro_method_changed_in(symbol_table)Perl_mro_method_changed_in( symbol_table);
2897 }
2898
2899#line 755 "Socket.xs"
2900#ifdef HAS_GETADDRINFO
2901 newXS("Socket::getaddrinfo", xs_getaddrinfo, __FILE__)Perl_newXS( "Socket::getaddrinfo",xs_getaddrinfo,"Socket.xs");
2902#endif
2903#ifdef HAS_GETNAMEINFO
2904 newXS("Socket::getnameinfo", xs_getnameinfo, __FILE__)Perl_newXS( "Socket::getnameinfo",xs_getnameinfo,"Socket.xs");
2905#endif
2906
2907#line 2908 "Socket.c"
2908
2909 /* End of Initialisation Section */
2910
2911#if PERL_VERSION_LE(5, 21, 5)((5*1000000 + 32*1000 + 1) <= (5*1000000 + 21*1000 + 5))
2912# if PERL_VERSION_GE(5, 9, 0)((5*1000000 + 32*1000 + 1) >= (5*1000000 + 9*1000 + 0))
2913 if (PL_unitcheckav)
2914 call_list(PL_scopestack_ix, PL_unitcheckav)Perl_call_list( PL_scopestack_ix,PL_unitcheckav);
2915# endif
2916 XSRETURN_YESdo { (PL_stack_base[ax + (0)] = &(PL_sv_immortals[0]) ); do
{ const IV tmpXSoff = (1); ((void)0); PL_stack_sp = PL_stack_base
+ ax + (tmpXSoff - 1); return; } while (0); } while (0)
;
2917#else
2918 Perl_xs_boot_epilog(aTHX_ ax);
2919#endif
2920}
2921