diff options
| author | unknown <diego.nehab@gmail.com> | 2013-05-25 18:07:38 +0800 |
|---|---|---|
| committer | unknown <diego.nehab@gmail.com> | 2013-05-25 18:07:38 +0800 |
| commit | bb0b31301a43e740f30cf438f9f2b3e68fbd7698 (patch) | |
| tree | 59204faeb58c5b7e9e874c3504fd3fead0ef7219 /src/inet.c | |
| parent | cbc77440c8d84487ed652ee65551df0f8592a53f (diff) | |
| download | luasocket-bb0b31301a43e740f30cf438f9f2b3e68fbd7698.tar.gz luasocket-bb0b31301a43e740f30cf438f9f2b3e68fbd7698.tar.bz2 luasocket-bb0b31301a43e740f30cf438f9f2b3e68fbd7698.zip | |
Add MingW support.
Diffstat (limited to 'src/inet.c')
| -rw-r--r-- | src/inet.c | 80 |
1 files changed, 37 insertions, 43 deletions
| @@ -385,7 +385,6 @@ const char *inet_trydisconnect(p_socket ps, int family, p_timeout tm) | |||
| 385 | struct in6_addr addrany = IN6ADDR_ANY_INIT; | 385 | struct in6_addr addrany = IN6ADDR_ANY_INIT; |
| 386 | memset((char *) &sin6, 0, sizeof(sin6)); | 386 | memset((char *) &sin6, 0, sizeof(sin6)); |
| 387 | sin6.sin6_family = AF_UNSPEC; | 387 | sin6.sin6_family = AF_UNSPEC; |
| 388 | fprintf(stderr, "disconnecting\n"); | ||
| 389 | sin6.sin6_addr = addrany; | 388 | sin6.sin6_addr = addrany; |
| 390 | return socket_strerror(socket_connect(ps, (SA *) &sin6, | 389 | return socket_strerror(socket_connect(ps, (SA *) &sin6, |
| 391 | sizeof(sin6), tm)); | 390 | sizeof(sin6), tm)); |
| @@ -507,54 +506,49 @@ int inet_aton(const char *cp, struct in_addr *inp) | |||
| 507 | } | 506 | } |
| 508 | #endif | 507 | #endif |
| 509 | 508 | ||
| 510 | // inet_ntop/inet_pton for MinGW from http://mingw-users.1079350.n2.nabble.com/IPv6-getaddrinfo-amp-inet-ntop-td5891996.html | 509 | /*-------------------------------------------------------------------------*\ |
| 510 | * inet_ntop/inet_pton for MinGW from | ||
| 511 | * http://mingw-users.1079350.n2.nabble.com/IPv6-getaddrinfo-amp-inet-ntop-td5891996.html | ||
| 512 | \*-------------------------------------------------------------------------*/ | ||
| 511 | 513 | ||
| 512 | #ifdef INET_PTON | 514 | #ifdef INET_PTON |
| 513 | const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) | 515 | const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) |
| 514 | { | 516 | { |
| 515 | if (af == AF_INET) | 517 | if (af == AF_INET) { |
| 516 | { | 518 | struct sockaddr_in in; |
| 517 | struct sockaddr_in in; | 519 | memset(&in, 0, sizeof(in)); |
| 518 | memset(&in, 0, sizeof(in)); | 520 | in.sin_family = AF_INET; |
| 519 | in.sin_family = AF_INET; | 521 | memcpy(&in.sin_addr, src, sizeof(struct in_addr)); |
| 520 | memcpy(&in.sin_addr, src, sizeof(struct in_addr)); | 522 | getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), |
| 521 | getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST); | 523 | dst, cnt, NULL, 0, NI_NUMERICHOST); |
| 522 | return dst; | 524 | return dst; |
| 523 | } | 525 | } else if (af == AF_INET6) { |
| 524 | else if (af == AF_INET6) | 526 | struct sockaddr_in6 in; |
| 525 | { | 527 | memset(&in, 0, sizeof(in)); |
| 526 | struct sockaddr_in6 in; | 528 | in.sin6_family = AF_INET6; |
| 527 | memset(&in, 0, sizeof(in)); | 529 | memcpy(&in.sin6_addr, src, sizeof(struct in_addr6)); |
| 528 | in.sin6_family = AF_INET6; | 530 | getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in6), |
| 529 | memcpy(&in.sin6_addr, src, sizeof(struct in_addr6)); | 531 | dst, cnt, NULL, 0, NI_NUMERICHOST); |
| 530 | getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST); | 532 | return dst; |
| 531 | return dst; | 533 | } |
| 532 | } | 534 | return NULL; |
| 533 | return NULL; | ||
| 534 | } | 535 | } |
| 535 | 536 | ||
| 536 | int inet_pton(int af, const char *src, void *dst) | 537 | int inet_pton(int af, const char *src, void *dst) |
| 537 | { | 538 | { |
| 538 | struct addrinfo hints, *res, *ressave; | 539 | struct addrinfo hints, *res, *ressave; |
| 539 | 540 | memset(&hints, 0, sizeof(struct addrinfo)); | |
| 540 | memset(&hints, 0, sizeof(struct addrinfo)); | 541 | hints.ai_family = af; |
| 541 | hints.ai_family = af; | 542 | if (getaddrinfo(src, NULL, &hints, &res) != 0) { |
| 542 | 543 | return -1; | |
| 543 | if (getaddrinfo(src, NULL, &hints, &res) != 0) | 544 | } |
| 544 | { | 545 | ressave = res; |
| 545 | return -1; | 546 | while (res) { |
| 546 | } | 547 | memcpy(dst, res->ai_addr, res->ai_addrlen); |
| 547 | 548 | res = res->ai_next; | |
| 548 | ressave = res; | 549 | } |
| 549 | 550 | freeaddrinfo(ressave); | |
| 550 | while (res) | 551 | return 0; |
| 551 | { | ||
| 552 | memcpy(dst, res->ai_addr, res->ai_addrlen); | ||
| 553 | res = res->ai_next; | ||
| 554 | } | ||
| 555 | |||
| 556 | freeaddrinfo(ressave); | ||
| 557 | return 0; | ||
| 558 | } | 552 | } |
| 559 | 553 | ||
| 560 | #endif | 554 | #endif |
