This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl 5.000
[perl5.git] / ext / Socket / Socket.xs
CommitLineData
a0d0e21e
LW
1#include "EXTERN.h"
2#include "perl.h"
3#include "XSUB.h"
4
5#include <sys/socket.h>
6
7#ifndef AF_NBS
8#undef PF_NBS
9#endif
10
11#ifndef AF_X25
12#undef PF_X25
13#endif
14
15static int
16not_here(s)
17char *s;
18{
19 croak("Socket::%s not implemented on this architecture", s);
20 return -1;
21}
22
23static double
24constant(name, arg)
25char *name;
26int arg;
27{
28 errno = 0;
29 switch (*name) {
30 case 'A':
31 if (strEQ(name, "AF_802"))
32#ifdef AF_802
33 return AF_802;
34#else
35 goto not_there;
36#endif
37 if (strEQ(name, "AF_APPLETALK"))
38#ifdef AF_APPLETALK
39 return AF_APPLETALK;
40#else
41 goto not_there;
42#endif
43 if (strEQ(name, "AF_CCITT"))
44#ifdef AF_CCITT
45 return AF_CCITT;
46#else
47 goto not_there;
48#endif
49 if (strEQ(name, "AF_CHAOS"))
50#ifdef AF_CHAOS
51 return AF_CHAOS;
52#else
53 goto not_there;
54#endif
55 if (strEQ(name, "AF_DATAKIT"))
56#ifdef AF_DATAKIT
57 return AF_DATAKIT;
58#else
59 goto not_there;
60#endif
61 if (strEQ(name, "AF_DECnet"))
62#ifdef AF_DECnet
63 return AF_DECnet;
64#else
65 goto not_there;
66#endif
67 if (strEQ(name, "AF_DLI"))
68#ifdef AF_DLI
69 return AF_DLI;
70#else
71 goto not_there;
72#endif
73 if (strEQ(name, "AF_ECMA"))
74#ifdef AF_ECMA
75 return AF_ECMA;
76#else
77 goto not_there;
78#endif
79 if (strEQ(name, "AF_GOSIP"))
80#ifdef AF_GOSIP
81 return AF_GOSIP;
82#else
83 goto not_there;
84#endif
85 if (strEQ(name, "AF_HYLINK"))
86#ifdef AF_HYLINK
87 return AF_HYLINK;
88#else
89 goto not_there;
90#endif
91 if (strEQ(name, "AF_IMPLINK"))
92#ifdef AF_IMPLINK
93 return AF_IMPLINK;
94#else
95 goto not_there;
96#endif
97 if (strEQ(name, "AF_INET"))
98#ifdef AF_INET
99 return AF_INET;
100#else
101 goto not_there;
102#endif
103 if (strEQ(name, "AF_LAT"))
104#ifdef AF_LAT
105 return AF_LAT;
106#else
107 goto not_there;
108#endif
109 if (strEQ(name, "AF_MAX"))
110#ifdef AF_MAX
111 return AF_MAX;
112#else
113 goto not_there;
114#endif
115 if (strEQ(name, "AF_NBS"))
116#ifdef AF_NBS
117 return AF_NBS;
118#else
119 goto not_there;
120#endif
121 if (strEQ(name, "AF_NIT"))
122#ifdef AF_NIT
123 return AF_NIT;
124#else
125 goto not_there;
126#endif
127 if (strEQ(name, "AF_NS"))
128#ifdef AF_NS
129 return AF_NS;
130#else
131 goto not_there;
132#endif
133 if (strEQ(name, "AF_OSI"))
134#ifdef AF_OSI
135 return AF_OSI;
136#else
137 goto not_there;
138#endif
139 if (strEQ(name, "AF_OSINET"))
140#ifdef AF_OSINET
141 return AF_OSINET;
142#else
143 goto not_there;
144#endif
145 if (strEQ(name, "AF_PUP"))
146#ifdef AF_PUP
147 return AF_PUP;
148#else
149 goto not_there;
150#endif
151 if (strEQ(name, "AF_SNA"))
152#ifdef AF_SNA
153 return AF_SNA;
154#else
155 goto not_there;
156#endif
157 if (strEQ(name, "AF_UNIX"))
158#ifdef AF_UNIX
159 return AF_UNIX;
160#else
161 goto not_there;
162#endif
163 if (strEQ(name, "AF_UNSPEC"))
164#ifdef AF_UNSPEC
165 return AF_UNSPEC;
166#else
167 goto not_there;
168#endif
169 if (strEQ(name, "AF_X25"))
170#ifdef AF_X25
171 return AF_X25;
172#else
173 goto not_there;
174#endif
175 break;
176 case 'B':
177 break;
178 case 'C':
179 break;
180 case 'D':
181 break;
182 case 'E':
183 break;
184 case 'F':
185 break;
186 case 'G':
187 break;
188 case 'H':
189 break;
190 case 'I':
191 break;
192 case 'J':
193 break;
194 case 'K':
195 break;
196 case 'L':
197 break;
198 case 'M':
199 if (strEQ(name, "MSG_DONTROUTE"))
200#ifdef MSG_DONTROUTE
201 return MSG_DONTROUTE;
202#else
203 goto not_there;
204#endif
205 if (strEQ(name, "MSG_MAXIOVLEN"))
206#ifdef MSG_MAXIOVLEN
207 return MSG_MAXIOVLEN;
208#else
209 goto not_there;
210#endif
211 if (strEQ(name, "MSG_OOB"))
212#ifdef MSG_OOB
213 return MSG_OOB;
214#else
215 goto not_there;
216#endif
217 if (strEQ(name, "MSG_PEEK"))
218#ifdef MSG_PEEK
219 return MSG_PEEK;
220#else
221 goto not_there;
222#endif
223 break;
224 case 'N':
225 break;
226 case 'O':
227 break;
228 case 'P':
229 if (strEQ(name, "PF_802"))
230#ifdef PF_802
231 return PF_802;
232#else
233 goto not_there;
234#endif
235 if (strEQ(name, "PF_APPLETALK"))
236#ifdef PF_APPLETALK
237 return PF_APPLETALK;
238#else
239 goto not_there;
240#endif
241 if (strEQ(name, "PF_CCITT"))
242#ifdef PF_CCITT
243 return PF_CCITT;
244#else
245 goto not_there;
246#endif
247 if (strEQ(name, "PF_CHAOS"))
248#ifdef PF_CHAOS
249 return PF_CHAOS;
250#else
251 goto not_there;
252#endif
253 if (strEQ(name, "PF_DATAKIT"))
254#ifdef PF_DATAKIT
255 return PF_DATAKIT;
256#else
257 goto not_there;
258#endif
259 if (strEQ(name, "PF_DECnet"))
260#ifdef PF_DECnet
261 return PF_DECnet;
262#else
263 goto not_there;
264#endif
265 if (strEQ(name, "PF_DLI"))
266#ifdef PF_DLI
267 return PF_DLI;
268#else
269 goto not_there;
270#endif
271 if (strEQ(name, "PF_ECMA"))
272#ifdef PF_ECMA
273 return PF_ECMA;
274#else
275 goto not_there;
276#endif
277 if (strEQ(name, "PF_GOSIP"))
278#ifdef PF_GOSIP
279 return PF_GOSIP;
280#else
281 goto not_there;
282#endif
283 if (strEQ(name, "PF_HYLINK"))
284#ifdef PF_HYLINK
285 return PF_HYLINK;
286#else
287 goto not_there;
288#endif
289 if (strEQ(name, "PF_IMPLINK"))
290#ifdef PF_IMPLINK
291 return PF_IMPLINK;
292#else
293 goto not_there;
294#endif
295 if (strEQ(name, "PF_INET"))
296#ifdef PF_INET
297 return PF_INET;
298#else
299 goto not_there;
300#endif
301 if (strEQ(name, "PF_LAT"))
302#ifdef PF_LAT
303 return PF_LAT;
304#else
305 goto not_there;
306#endif
307 if (strEQ(name, "PF_MAX"))
308#ifdef PF_MAX
309 return PF_MAX;
310#else
311 goto not_there;
312#endif
313 if (strEQ(name, "PF_NBS"))
314#ifdef PF_NBS
315 return PF_NBS;
316#else
317 goto not_there;
318#endif
319 if (strEQ(name, "PF_NIT"))
320#ifdef PF_NIT
321 return PF_NIT;
322#else
323 goto not_there;
324#endif
325 if (strEQ(name, "PF_NS"))
326#ifdef PF_NS
327 return PF_NS;
328#else
329 goto not_there;
330#endif
331 if (strEQ(name, "PF_OSI"))
332#ifdef PF_OSI
333 return PF_OSI;
334#else
335 goto not_there;
336#endif
337 if (strEQ(name, "PF_OSINET"))
338#ifdef PF_OSINET
339 return PF_OSINET;
340#else
341 goto not_there;
342#endif
343 if (strEQ(name, "PF_PUP"))
344#ifdef PF_PUP
345 return PF_PUP;
346#else
347 goto not_there;
348#endif
349 if (strEQ(name, "PF_SNA"))
350#ifdef PF_SNA
351 return PF_SNA;
352#else
353 goto not_there;
354#endif
355 if (strEQ(name, "PF_UNIX"))
356#ifdef PF_UNIX
357 return PF_UNIX;
358#else
359 goto not_there;
360#endif
361 if (strEQ(name, "PF_UNSPEC"))
362#ifdef PF_UNSPEC
363 return PF_UNSPEC;
364#else
365 goto not_there;
366#endif
367 if (strEQ(name, "PF_X25"))
368#ifdef PF_X25
369 return PF_X25;
370#else
371 goto not_there;
372#endif
373 break;
374 case 'Q':
375 break;
376 case 'R':
377 break;
378 case 'S':
379 if (strEQ(name, "SOCK_DGRAM"))
380#ifdef SOCK_DGRAM
381 return SOCK_DGRAM;
382#else
383 goto not_there;
384#endif
385 if (strEQ(name, "SOCK_RAW"))
386#ifdef SOCK_RAW
387 return SOCK_RAW;
388#else
389 goto not_there;
390#endif
391 if (strEQ(name, "SOCK_RDM"))
392#ifdef SOCK_RDM
393 return SOCK_RDM;
394#else
395 goto not_there;
396#endif
397 if (strEQ(name, "SOCK_SEQPACKET"))
398#ifdef SOCK_SEQPACKET
399 return SOCK_SEQPACKET;
400#else
401 goto not_there;
402#endif
403 if (strEQ(name, "SOCK_STREAM"))
404#ifdef SOCK_STREAM
405 return SOCK_STREAM;
406#else
407 goto not_there;
408#endif
409 if (strEQ(name, "SOL_SOCKET"))
410#ifdef SOL_SOCKET
411 return SOL_SOCKET;
412#else
413 goto not_there;
414#endif
415 if (strEQ(name, "SOMAXCONN"))
416#ifdef SOMAXCONN
417 return SOMAXCONN;
418#else
419 goto not_there;
420#endif
421 if (strEQ(name, "SO_ACCEPTCONN"))
422#ifdef SO_ACCEPTCONN
423 return SO_ACCEPTCONN;
424#else
425 goto not_there;
426#endif
427 if (strEQ(name, "SO_BROADCAST"))
428#ifdef SO_BROADCAST
429 return SO_BROADCAST;
430#else
431 goto not_there;
432#endif
433 if (strEQ(name, "SO_DEBUG"))
434#ifdef SO_DEBUG
435 return SO_DEBUG;
436#else
437 goto not_there;
438#endif
439 if (strEQ(name, "SO_DONTLINGER"))
440#ifdef SO_DONTLINGER
441 return SO_DONTLINGER;
442#else
443 goto not_there;
444#endif
445 if (strEQ(name, "SO_DONTROUTE"))
446#ifdef SO_DONTROUTE
447 return SO_DONTROUTE;
448#else
449 goto not_there;
450#endif
451 if (strEQ(name, "SO_ERROR"))
452#ifdef SO_ERROR
453 return SO_ERROR;
454#else
455 goto not_there;
456#endif
457 if (strEQ(name, "SO_KEEPALIVE"))
458#ifdef SO_KEEPALIVE
459 return SO_KEEPALIVE;
460#else
461 goto not_there;
462#endif
463 if (strEQ(name, "SO_LINGER"))
464#ifdef SO_LINGER
465 return SO_LINGER;
466#else
467 goto not_there;
468#endif
469 if (strEQ(name, "SO_OOBINLINE"))
470#ifdef SO_OOBINLINE
471 return SO_OOBINLINE;
472#else
473 goto not_there;
474#endif
475 if (strEQ(name, "SO_RCVBUF"))
476#ifdef SO_RCVBUF
477 return SO_RCVBUF;
478#else
479 goto not_there;
480#endif
481 if (strEQ(name, "SO_RCVLOWAT"))
482#ifdef SO_RCVLOWAT
483 return SO_RCVLOWAT;
484#else
485 goto not_there;
486#endif
487 if (strEQ(name, "SO_RCVTIMEO"))
488#ifdef SO_RCVTIMEO
489 return SO_RCVTIMEO;
490#else
491 goto not_there;
492#endif
493 if (strEQ(name, "SO_REUSEADDR"))
494#ifdef SO_REUSEADDR
495 return SO_REUSEADDR;
496#else
497 goto not_there;
498#endif
499 if (strEQ(name, "SO_REUSEPORT"))
500#ifdef SO_REUSEPORT
501 return SO_REUSEPORT;
502#else
503 goto not_there;
504#endif
505 if (strEQ(name, "SO_SNDBUF"))
506#ifdef SO_SNDBUF
507 return SO_SNDBUF;
508#else
509 goto not_there;
510#endif
511 if (strEQ(name, "SO_SNDLOWAT"))
512#ifdef SO_SNDLOWAT
513 return SO_SNDLOWAT;
514#else
515 goto not_there;
516#endif
517 if (strEQ(name, "SO_SNDTIMEO"))
518#ifdef SO_SNDTIMEO
519 return SO_SNDTIMEO;
520#else
521 goto not_there;
522#endif
523 if (strEQ(name, "SO_TYPE"))
524#ifdef SO_TYPE
525 return SO_TYPE;
526#else
527 goto not_there;
528#endif
529 if (strEQ(name, "SO_USELOOPBACK"))
530#ifdef SO_USELOOPBACK
531 return SO_USELOOPBACK;
532#else
533 goto not_there;
534#endif
535 break;
536 case 'T':
537 break;
538 case 'U':
539 break;
540 case 'V':
541 break;
542 case 'W':
543 break;
544 case 'X':
545 break;
546 case 'Y':
547 break;
548 case 'Z':
549 break;
550 }
551 errno = EINVAL;
552 return 0;
553
554not_there:
555 errno = ENOENT;
556 return 0;
557}
558
559MODULE = Socket PACKAGE = Socket
560
561double
562constant(name,arg)
563 char * name
564 int arg
565