comparison druntime/import/stdc/posix/sys/socket.d @ 760:6f33b427bfd1

Seems like hg ignores .di files, so I missed a bunch of stuff. complete druntime should be there now :)
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Wed, 12 Nov 2008 00:19:18 +0100
parents
children
comparison
equal deleted inserted replaced
759:d3eb054172f9 760:6f33b427bfd1
1 /**
2 * D header file for POSIX.
3 *
4 * Copyright: Public Domain
5 * License: Public Domain
6 * Authors: Sean Kelly
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8 */
9 module stdc.posix.sys.socket;
10
11 private import stdc.posix.config;
12 public import stdc.posix.sys.types; // for ssize_t, size_t
13 public import stdc.posix.sys.uio; // for iovec
14
15 extern (C):
16
17 //
18 // Required
19 //
20 /*
21 socklen_t
22 sa_family_t
23
24 struct sockaddr
25 {
26 sa_family_t sa_family;
27 char sa_data[];
28 }
29
30 struct sockaddr_storage
31 {
32 sa_family_t ss_family;
33 }
34
35 struct msghdr
36 {
37 void* msg_name;
38 socklen_t msg_namelen;
39 struct iovec* msg_iov;
40 int msg_iovlen;
41 void* msg_control;
42 socklen_t msg_controllen;
43 int msg_flags;
44 }
45
46 struct iovec {} // from stdc.posix.sys.uio
47
48 struct cmsghdr
49 {
50 socklen_t cmsg_len;
51 int cmsg_level;
52 int cmsg_type;
53 }
54
55 SCM_RIGHTS
56
57 CMSG_DATA(cmsg)
58 CMSG_NXTHDR(mhdr,cmsg)
59 CMSG_FIRSTHDR(mhdr)
60
61 struct linger
62 {
63 int l_onoff;
64 int l_linger;
65 }
66
67 SOCK_DGRAM
68 SOCK_SEQPACKET
69 SOCK_STREAM
70
71 SOL_SOCKET
72
73 SO_ACCEPTCONN
74 SO_BROADCAST
75 SO_DEBUG
76 SO_DONTROUTE
77 SO_ERROR
78 SO_KEEPALIVE
79 SO_LINGER
80 SO_OOBINLINE
81 SO_RCVBUF
82 SO_RCVLOWAT
83 SO_RCVTIMEO
84 SO_REUSEADDR
85 SO_SNDBUF
86 SO_SNDLOWAT
87 SO_SNDTIMEO
88 SO_TYPE
89
90 SOMAXCONN
91
92 MSG_CTRUNC
93 MSG_DONTROUTE
94 MSG_EOR
95 MSG_OOB
96 MSG_PEEK
97 MSG_TRUNC
98 MSG_WAITALL
99
100 AF_INET
101 AF_UNIX
102 AF_UNSPEC
103
104 SHUT_RD
105 SHUT_RDWR
106 SHUT_WR
107
108 int accept(int, sockaddr*, socklen_t*);
109 int bind(int, in sockaddr*, socklen_t);
110 int connect(int, in sockaddr*, socklen_t);
111 int getpeername(int, sockaddr*, socklen_t*);
112 int getsockname(int, sockaddr*, socklen_t*);
113 int getsockopt(int, int, int, void*, socklen_t*);
114 int listen(int, int);
115 ssize_t recv(int, void*, size_t, int);
116 ssize_t recvfrom(int, void*, size_t, int, sockaddr*, socklen_t*);
117 ssize_t recvmsg(int, msghdr*, int);
118 ssize_t send(int, in void*, size_t, int);
119 ssize_t sendmsg(int, in msghdr*, int);
120 ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
121 int setsockopt(int, int, int, in void*, socklen_t);
122 int shutdown(int, int);
123 int socket(int, int, int);
124 int sockatmark(int);
125 int socketpair(int, int, int, int[2]);
126 */
127
128 version( linux )
129 {
130 alias uint socklen_t;
131 alias ushort sa_family_t;
132
133 struct sockaddr
134 {
135 sa_family_t sa_family;
136 byte[14] sa_data;
137 }
138
139 private enum : size_t
140 {
141 _SS_SIZE = 128,
142 _SS_PADSIZE = _SS_SIZE - (c_ulong.sizeof * 2)
143 }
144
145 struct sockaddr_storage
146 {
147 sa_family_t ss_family;
148 c_ulong __ss_align;
149 byte[_SS_PADSIZE] __ss_padding;
150 }
151
152 struct msghdr
153 {
154 void* msg_name;
155 socklen_t msg_namelen;
156 iovec* msg_iov;
157 size_t msg_iovlen;
158 void* msg_control;
159 size_t msg_controllen;
160 int msg_flags;
161 }
162
163 struct cmsghdr
164 {
165 size_t cmsg_len;
166 int cmsg_level;
167 int cmsg_type;
168 static if( false /* (!is( __STRICT_ANSI__ ) && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L */ )
169 {
170 ubyte[1] __cmsg_data;
171 }
172 }
173
174 enum : uint
175 {
176 SCM_RIGHTS = 0x01
177 }
178
179 static if( false /* (!is( __STRICT_ANSI__ ) && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L */ )
180 {
181 extern (D) ubyte[1] CMSG_DATA( cmsghdr* cmsg ) { return cmsg.__cmsg_data; }
182 }
183 else
184 {
185 extern (D) ubyte* CMSG_DATA( cmsghdr* cmsg ) { return cast(ubyte*)( cmsg + 1 ); }
186 }
187
188 private cmsghdr* __cmsg_nxthdr(msghdr*, cmsghdr*);
189 alias __cmsg_nxthdr CMSG_NXTHDR;
190
191 extern (D) size_t CMSG_FIRSTHDR( msghdr* mhdr )
192 {
193 return cast(size_t)( mhdr.msg_controllen >= cmsghdr.sizeof
194 ? cast(cmsghdr*) mhdr.msg_control
195 : cast(cmsghdr*) null );
196 }
197
198 struct linger
199 {
200 int l_onoff;
201 int l_linger;
202 }
203
204 enum
205 {
206 SOCK_DGRAM = 2,
207 SOCK_SEQPACKET = 5,
208 SOCK_STREAM = 1
209 }
210
211 enum
212 {
213 SOL_SOCKET = 1
214 }
215
216 enum
217 {
218 SO_ACCEPTCONN = 30,
219 SO_BROADCAST = 6,
220 SO_DEBUG = 1,
221 SO_DONTROUTE = 5,
222 SO_ERROR = 4,
223 SO_KEEPALIVE = 9,
224 SO_LINGER = 13,
225 SO_OOBINLINE = 10,
226 SO_RCVBUF = 8,
227 SO_RCVLOWAT = 18,
228 SO_RCVTIMEO = 20,
229 SO_REUSEADDR = 2,
230 SO_SNDBUF = 7,
231 SO_SNDLOWAT = 19,
232 SO_SNDTIMEO = 21,
233 SO_TYPE = 3
234 }
235
236 enum
237 {
238 SOMAXCONN = 128
239 }
240
241 enum : uint
242 {
243 MSG_CTRUNC = 0x08,
244 MSG_DONTROUTE = 0x04,
245 MSG_EOR = 0x80,
246 MSG_OOB = 0x01,
247 MSG_PEEK = 0x02,
248 MSG_TRUNC = 0x20,
249 MSG_WAITALL = 0x100
250 }
251
252 enum
253 {
254 AF_INET = 2,
255 AF_UNIX = 1,
256 AF_UNSPEC = 0
257 }
258
259 enum
260 {
261 SHUT_RD,
262 SHUT_WR,
263 SHUT_RDWR
264 }
265
266 int accept(int, sockaddr*, socklen_t*);
267 int bind(int, in sockaddr*, socklen_t);
268 int connect(int, in sockaddr*, socklen_t);
269 int getpeername(int, sockaddr*, socklen_t*);
270 int getsockname(int, sockaddr*, socklen_t*);
271 int getsockopt(int, int, int, void*, socklen_t*);
272 int listen(int, int);
273 ssize_t recv(int, void*, size_t, int);
274 ssize_t recvfrom(int, void*, size_t, int, sockaddr*, socklen_t*);
275 ssize_t recvmsg(int, msghdr*, int);
276 ssize_t send(int, in void*, size_t, int);
277 ssize_t sendmsg(int, in msghdr*, int);
278 ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
279 int setsockopt(int, int, int, in void*, socklen_t);
280 int shutdown(int, int);
281 int socket(int, int, int);
282 int sockatmark(int);
283 int socketpair(int, int, int, int[2]);
284 }
285 else version( darwin )
286 {
287 alias uint socklen_t;
288 alias ubyte sa_family_t;
289
290 struct sockaddr
291 {
292 ubyte sa_len;
293 sa_family_t sa_family;
294 byte[14] sa_data;
295 }
296
297 private enum : size_t
298 {
299 _SS_PAD1 = long.sizeof - ubyte.sizeof - sa_family_t.sizeof,
300 _SS_PAD2 = 128 - ubyte.sizeof - sa_family_t.sizeof - _SS_PAD1 - long.sizeof
301 }
302
303 struct sockaddr_storage
304 {
305 ubyte ss_len;
306 sa_family_t ss_family;
307 byte[_SS_PAD1] __ss_pad1;
308 long __ss_align;
309 byte[_SS_PAD2] __ss_pad2;
310 }
311
312 struct msghdr
313 {
314 void* msg_name;
315 socklen_t msg_namelen;
316 iovec* msg_iov;
317 int msg_iovlen;
318 void* msg_control;
319 socklen_t msg_controllen;
320 int msg_flags;
321 }
322
323 struct cmsghdr
324 {
325 socklen_t cmsg_len;
326 int cmsg_level;
327 int cmsg_type;
328 }
329
330 enum : uint
331 {
332 SCM_RIGHTS = 0x01
333 }
334
335 /+
336 CMSG_DATA(cmsg) ((unsigned char *)(cmsg) + \
337 ALIGN(sizeof(struct cmsghdr)))
338 CMSG_NXTHDR(mhdr, cmsg) \
339 (((unsigned char *)(cmsg) + ALIGN((cmsg)->cmsg_len) + \
340 ALIGN(sizeof(struct cmsghdr)) > \
341 (unsigned char *)(mhdr)->msg_control +(mhdr)->msg_controllen) ? \
342 (struct cmsghdr *)0 /* NULL */ : \
343 (struct cmsghdr *)((unsigned char *)(cmsg) + ALIGN((cmsg)->cmsg_len)))
344 CMSG_FIRSTHDR(mhdr) ((struct cmsghdr *)(mhdr)->msg_control)
345 +/
346
347 struct linger
348 {
349 int l_onoff;
350 int l_linger;
351 }
352
353 enum
354 {
355 SOCK_DGRAM = 2,
356 SOCK_SEQPACKET = 5,
357 SOCK_STREAM = 1
358 }
359
360 enum : uint
361 {
362 SOL_SOCKET = 0xffff
363 }
364
365 enum : uint
366 {
367 SO_ACCEPTCONN = 0x0002,
368 SO_BROADCAST = 0x0020,
369 SO_DEBUG = 0x0001,
370 SO_DONTROUTE = 0x0010,
371 SO_ERROR = 0x1007,
372 SO_KEEPALIVE = 0x0008,
373 SO_LINGER = 0x1080,
374 SO_OOBINLINE = 0x0100,
375 SO_RCVBUF = 0x1002,
376 SO_RCVLOWAT = 0x1004,
377 SO_RCVTIMEO = 0x1006,
378 SO_REUSEADDR = 0x1006,
379 SO_SNDBUF = 0x1001,
380 SO_SNDLOWAT = 0x1003,
381 SO_SNDTIMEO = 0x1005,
382 SO_TYPE = 0x1008
383 }
384
385 enum
386 {
387 SOMAXCONN = 128
388 }
389
390 enum : uint
391 {
392 MSG_CTRUNC = 0x20,
393 MSG_DONTROUTE = 0x4,
394 MSG_EOR = 0x8,
395 MSG_OOB = 0x1,
396 MSG_PEEK = 0x2,
397 MSG_TRUNC = 0x10,
398 MSG_WAITALL = 0x40
399 }
400
401 enum
402 {
403 AF_INET = 2,
404 AF_UNIX = 1,
405 AF_UNSPEC = 0
406 }
407
408 enum
409 {
410 SHUT_RD,
411 SHUT_WR,
412 SHUT_RDWR
413 }
414
415 int accept(int, sockaddr*, socklen_t*);
416 int bind(int, in sockaddr*, socklen_t);
417 int connect(int, in sockaddr*, socklen_t);
418 int getpeername(int, sockaddr*, socklen_t*);
419 int getsockname(int, sockaddr*, socklen_t*);
420 int getsockopt(int, int, int, void*, socklen_t*);
421 int listen(int, int);
422 ssize_t recv(int, void*, size_t, int);
423 ssize_t recvfrom(int, void*, size_t, int, sockaddr*, socklen_t*);
424 ssize_t recvmsg(int, msghdr*, int);
425 ssize_t send(int, in void*, size_t, int);
426 ssize_t sendmsg(int, in msghdr*, int);
427 ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
428 int setsockopt(int, int, int, in void*, socklen_t);
429 int shutdown(int, int);
430 int socket(int, int, int);
431 int sockatmark(int);
432 int socketpair(int, int, int, int[2]);
433 }
434 else version( freebsd )
435 {
436 alias uint socklen_t;
437 alias ubyte sa_family_t;
438
439 struct sockaddr
440 {
441 ubyte sa_len;
442 sa_family_t sa_family;
443 byte[14] sa_data;
444 }
445
446 private
447 {
448 const _SS_ALIGNSIZE = long.sizeof;
449 const uint _SS_MAXSIZE = 128;
450 const _SS_PAD1SIZE = _SS_ALIGNSIZE - ubyte.sizeof - sa_family_t.sizeof;
451 const _SS_PAD2SIZE = _SS_MAXSIZE - ubyte.sizeof - sa_family_t.sizeof - _SS_PAD1SIZE - _SS_ALIGNSIZE;
452 }
453
454 struct sockaddr_storage
455 {
456 ubyte ss_len;
457 sa_family_t ss_family;
458 byte[_SS_PAD1SIZE] __ss_pad1;
459 long __ss_align;
460 byte[_SS_PAD2SIZE] __ss_pad2;
461 }
462
463 struct msghdr
464 {
465 void* msg_name;
466 socklen_t msg_namelen;
467 iovec* msg_iov;
468 int msg_iovlen;
469 void* msg_control;
470 socklen_t msg_controllen;
471 int msg_flags;
472 }
473
474 struct cmsghdr
475 {
476 socklen_t cmsg_len;
477 int cmsg_level;
478 int cmsg_type;
479 }
480
481 enum : uint
482 {
483 SCM_RIGHTS = 0x01
484 }
485
486 /+
487 CMSG_DATA(cmsg) ((unsigned char *)(cmsg) + \
488 ALIGN(sizeof(struct cmsghdr)))
489 CMSG_NXTHDR(mhdr, cmsg) \
490 (((unsigned char *)(cmsg) + ALIGN((cmsg)->cmsg_len) + \
491 ALIGN(sizeof(struct cmsghdr)) > \
492 (unsigned char *)(mhdr)->msg_control +(mhdr)->msg_controllen) ? \
493 (struct cmsghdr *)0 /* NULL */ : \
494 (struct cmsghdr *)((unsigned char *)(cmsg) + ALIGN((cmsg)->cmsg_len)))
495 CMSG_FIRSTHDR(mhdr) ((struct cmsghdr *)(mhdr)->msg_control)
496 +/
497
498 struct linger
499 {
500 int l_onoff;
501 int l_linger;
502 }
503
504 enum
505 {
506 SOCK_DGRAM = 2,
507 SOCK_SEQPACKET = 5,
508 SOCK_STREAM = 1
509 }
510
511 enum : uint
512 {
513 SOL_SOCKET = 0xffff
514 }
515
516 enum : uint
517 {
518 SO_ACCEPTCONN = 0x0002,
519 SO_BROADCAST = 0x0020,
520 SO_DEBUG = 0x0001,
521 SO_DONTROUTE = 0x0010,
522 SO_ERROR = 0x1007,
523 SO_KEEPALIVE = 0x0008,
524 SO_LINGER = 0x1080,
525 SO_OOBINLINE = 0x0100,
526 SO_RCVBUF = 0x1002,
527 SO_RCVLOWAT = 0x1004,
528 SO_RCVTIMEO = 0x1006,
529 SO_REUSEADDR = 0x1006,
530 SO_SNDBUF = 0x1001,
531 SO_SNDLOWAT = 0x1003,
532 SO_SNDTIMEO = 0x1005,
533 SO_TYPE = 0x1008
534 }
535
536 enum
537 {
538 SOMAXCONN = 128
539 }
540
541 enum : uint
542 {
543 MSG_CTRUNC = 0x20,
544 MSG_DONTROUTE = 0x4,
545 MSG_EOR = 0x8,
546 MSG_OOB = 0x1,
547 MSG_PEEK = 0x2,
548 MSG_TRUNC = 0x10,
549 MSG_WAITALL = 0x40
550 }
551
552 enum
553 {
554 AF_INET = 2,
555 AF_UNIX = 1,
556 AF_UNSPEC = 0
557 }
558
559 enum
560 {
561 SHUT_RD = 0,
562 SHUT_WR = 1,
563 SHUT_RDWR = 2
564 }
565
566 int accept(int, sockaddr*, socklen_t*);
567 int bind(int, in sockaddr*, socklen_t);
568 int connect(int, in sockaddr*, socklen_t);
569 int getpeername(int, sockaddr*, socklen_t*);
570 int getsockname(int, sockaddr*, socklen_t*);
571 int getsockopt(int, int, int, void*, socklen_t*);
572 int listen(int, int);
573 ssize_t recv(int, void*, size_t, int);
574 ssize_t recvfrom(int, void*, size_t, int, sockaddr*, socklen_t*);
575 ssize_t recvmsg(int, msghdr*, int);
576 ssize_t send(int, in void*, size_t, int);
577 ssize_t sendmsg(int, in msghdr*, int);
578 ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
579 int setsockopt(int, int, int, in void*, socklen_t);
580 int shutdown(int, int);
581 int socket(int, int, int);
582 int sockatmark(int);
583 int socketpair(int, int, int, int[2]);
584 }
585
586 //
587 // IPV6 (IP6)
588 //
589 /*
590 AF_INET6
591 */
592
593 version( linux )
594 {
595 enum
596 {
597 AF_INET6 = 10
598 }
599 }
600 else version( darwin )
601 {
602 enum
603 {
604 AF_INET6 = 30
605 }
606 }
607 else version( freebsd )
608 {
609 enum
610 {
611 AF_INET6 = 28
612 }
613 }
614
615 //
616 // Raw Sockets (RS)
617 //
618 /*
619 SOCK_RAW
620 */
621
622 version( linux )
623 {
624 enum
625 {
626 SOCK_RAW = 3
627 }
628 }
629 else version( darwin )
630 {
631 enum
632 {
633 SOCK_RAW = 3
634 }
635 }
636 else version( freebsd )
637 {
638 enum
639 {
640 SOCK_RAW = 3
641 }
642 }