 |
Changeset 3098
- Timestamp:
- 01/15/08 14:50:57
(11 months ago)
- Author:
- sean
- Message:
Added darwin socket defs. This closes #702.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r2809 |
r3098 |
|
| 46 | 46 | struct in_addr |
|---|
| 47 | 47 | { |
|---|
| 48 | | in_addr_t s_addr;; |
|---|
| | 48 | in_addr_t s_addr; |
|---|
| 49 | 49 | } |
|---|
| 50 | 50 | |
|---|
| … | … | |
| 63 | 63 | else version( darwin ) |
|---|
| 64 | 64 | { |
|---|
| | 65 | alias uint16_t in_port_t; // TODO: verify |
|---|
| | 66 | alias uint32_t in_addr_t; // TODO: verify |
|---|
| 65 | 67 | |
|---|
| | 68 | struct in_addr |
|---|
| | 69 | { |
|---|
| | 70 | in_addr_t s_addr; |
|---|
| | 71 | } |
|---|
| | 72 | |
|---|
| | 73 | const INET_ADDRSTRLEN = 16; |
|---|
| | 74 | |
|---|
| | 75 | uint32_t htonl(uint32_t); |
|---|
| | 76 | uint16_t htons(uint16_t); |
|---|
| | 77 | uint32_t ntohl(uint32_t); |
|---|
| | 78 | uint16_t ntohs(uint16_t); |
|---|
| | 79 | |
|---|
| | 80 | in_addr_t inet_addr(char*); |
|---|
| | 81 | char* inet_ntoa(in_addr); |
|---|
| | 82 | char* inet_ntop(int, void*, char*, socklen_t); |
|---|
| | 83 | int inet_pton(int, char*, void*); |
|---|
| 66 | 84 | } |
|---|
| 67 | 85 | |
|---|
| … | … | |
| 80 | 98 | else version( darwin ) |
|---|
| 81 | 99 | { |
|---|
| 82 | | |
|---|
| | 100 | const INET6_ADDRSTRLEN = 46; |
|---|
| 83 | 101 | } |
|---|
| r2809 |
r3098 |
|
| 48 | 48 | else version( darwin ) |
|---|
| 49 | 49 | { |
|---|
| | 50 | struct if_nameindex_t |
|---|
| | 51 | { |
|---|
| | 52 | uint if_index; |
|---|
| | 53 | char* if_name; |
|---|
| | 54 | } |
|---|
| 50 | 55 | |
|---|
| | 56 | const IF_NAMESIZE = 16; |
|---|
| | 57 | |
|---|
| | 58 | uint if_nametoindex(char*); |
|---|
| | 59 | char* if_indextoname(uint, char*); |
|---|
| | 60 | if_nameindex_t* if_nameindex(); |
|---|
| | 61 | void if_freenameindex(if_nameindex_t*); |
|---|
| 51 | 62 | } |
|---|
| r2809 |
r3098 |
|
| 12 | 12 | public import tango.stdc.inttypes : uint32_t, uint16_t; |
|---|
| 13 | 13 | public import tango.stdc.posix.arpa.inet; |
|---|
| | 14 | public import tango.stdc.posix.sys.socket; // for sa_family_t |
|---|
| 14 | 15 | |
|---|
| 15 | 16 | extern (C): |
|---|
| … | … | |
| 25 | 26 | in_addr_t |
|---|
| 26 | 27 | |
|---|
| 27 | | sa_family_t |
|---|
| 28 | | uint8_t // from tango.stdc.inttypes |
|---|
| 29 | | uint32_t // from tango.stdc.inttypes |
|---|
| | 28 | sa_family_t // from tango.stdc.posix.sys.socket |
|---|
| | 29 | uint8_t // from tango.stdc.inttypes |
|---|
| | 30 | uint32_t // from tango.stdc.inttypes |
|---|
| 30 | 31 | |
|---|
| 31 | 32 | struct in_addr |
|---|
| … | … | |
| 59 | 60 | version( linux ) |
|---|
| 60 | 61 | { |
|---|
| 61 | | alias ushort sa_family_t; |
|---|
| 62 | | |
|---|
| 63 | 62 | private const __SOCK_SIZE__ = 16; |
|---|
| 64 | 63 | |
|---|
| … | … | |
| 82 | 81 | } |
|---|
| 83 | 82 | |
|---|
| 84 | | const c_ulong INADDR_ANY = 0x00000000; |
|---|
| 85 | | const c_ulong INADDR_BROADCAST = 0xffffffff; |
|---|
| | 83 | const uint INADDR_ANY = 0x00000000; |
|---|
| | 84 | const uint INADDR_BROADCAST = 0xffffffff; |
|---|
| 86 | 85 | } |
|---|
| 87 | 86 | else version( darwin ) |
|---|
| 88 | 87 | { |
|---|
| | 88 | private const __SOCK_SIZE__ = 16; |
|---|
| 89 | 89 | |
|---|
| | 90 | struct sockaddr_in |
|---|
| | 91 | { |
|---|
| | 92 | ubyte sin_len; |
|---|
| | 93 | sa_family_t sin_family; |
|---|
| | 94 | in_port_t sin_port; |
|---|
| | 95 | in_addr sin_addr; |
|---|
| | 96 | ubyte[8] sin_zero; |
|---|
| | 97 | } |
|---|
| | 98 | |
|---|
| | 99 | enum |
|---|
| | 100 | { |
|---|
| | 101 | IPPROTO_IP = 0, |
|---|
| | 102 | IPPROTO_ICMP = 1, |
|---|
| | 103 | IPPROTO_TCP = 6, |
|---|
| | 104 | IPPROTO_UDP = 17 |
|---|
| | 105 | } |
|---|
| | 106 | |
|---|
| | 107 | const uint INADDR_ANY = 0x00000000; |
|---|
| | 108 | const uint INADDR_BROADCAST = 0xffffffff; |
|---|
| 90 | 109 | } |
|---|
| 91 | 110 | |
|---|
| r2809 |
r3098 |
|
| 26 | 26 | else version( darwin ) |
|---|
| 27 | 27 | { |
|---|
| 28 | | |
|---|
| | 28 | const TCP_NODELAY = 1; |
|---|
| 29 | 29 | } |
|---|
| r2864 |
r3098 |
|
| 152 | 152 | struct msghdr |
|---|
| 153 | 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; |
|---|
| | 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 | 161 | } |
|---|
| 162 | 162 | |
|---|
| … | … | |
| 286 | 286 | { |
|---|
| 287 | 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, sockaddr*, socklen_t); |
|---|
| | 417 | int connect(int, 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, void*, size_t, int); |
|---|
| | 426 | ssize_t sendmsg(int, msghdr*, int); |
|---|
| | 427 | ssize_t sendto(int, void*, size_t, int, sockaddr*, socklen_t); |
|---|
| | 428 | int setsockopt(int, int, int, 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]); |
|---|
| 288 | 433 | } |
|---|
| 289 | 434 | |
|---|
| … | … | |
| 302 | 447 | } |
|---|
| 303 | 448 | } |
|---|
| | 449 | else version( darwin ) |
|---|
| | 450 | { |
|---|
| | 451 | enum |
|---|
| | 452 | { |
|---|
| | 453 | AF_INET6 = 30 |
|---|
| | 454 | } |
|---|
| | 455 | } |
|---|
| 304 | 456 | |
|---|
| 305 | 457 | // |
|---|
| … | … | |
| 317 | 469 | } |
|---|
| 318 | 470 | } |
|---|
| | 471 | else version( darwin ) |
|---|
| | 472 | { |
|---|
| | 473 | enum |
|---|
| | 474 | { |
|---|
| | 475 | SOCK_RAW = 3 |
|---|
| | 476 | } |
|---|
| | 477 | } |
|---|
| r2809 |
r3098 |
|
| 42 | 42 | ssize_t writev(int, iovec*, int); |
|---|
| 43 | 43 | } |
|---|
| | 44 | else version( darwin ) |
|---|
| | 45 | { |
|---|
| | 46 | struct iovec |
|---|
| | 47 | { |
|---|
| | 48 | void* iov_base; |
|---|
| | 49 | size_t iov_len; |
|---|
| | 50 | } |
|---|
| | 51 | |
|---|
| | 52 | ssize_t readv(int, iovec*, int); |
|---|
| | 53 | ssize_t writev(int, iovec*, int); |
|---|
| | 54 | } |
|---|
Download in other formats:
|
 |