aboutsummaryrefslogtreecommitdiff
path: root/src/inet.c
diff options
context:
space:
mode:
authorunknown <diego.nehab@gmail.com>2013-05-25 18:07:38 +0800
committerunknown <diego.nehab@gmail.com>2013-05-25 18:07:38 +0800
commitbb0b31301a43e740f30cf438f9f2b3e68fbd7698 (patch)
tree59204faeb58c5b7e9e874c3504fd3fead0ef7219 /src/inet.c
parentcbc77440c8d84487ed652ee65551df0f8592a53f (diff)
downloadluasocket-bb0b31301a43e740f30cf438f9f2b3e68fbd7698.tar.gz
luasocket-bb0b31301a43e740f30cf438f9f2b3e68fbd7698.tar.bz2
luasocket-bb0b31301a43e740f30cf438f9f2b3e68fbd7698.zip
Add MingW support.
Diffstat (limited to 'src/inet.c')
-rw-r--r--src/inet.c80
1 files changed, 37 insertions, 43 deletions
diff --git a/src/inet.c b/src/inet.c
index 1017022..1530fef 100644
--- a/src/inet.c
+++ b/src/inet.c
@@ -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;
388fprintf(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
513const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) 515const 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
536int inet_pton(int af, const char *src, void *dst) 537int 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