aboutsummaryrefslogtreecommitdiff
path: root/src/inet.c
diff options
context:
space:
mode:
authorunknown <diego.nehab@gmail.com>2013-05-28 17:27:06 +0800
committerunknown <diego.nehab@gmail.com>2013-05-28 17:27:06 +0800
commit2d51d6168874cdb2b72ee4f56f414d9a9a9d92e5 (patch)
tree788c50ccb42bd982531c62e6ede21f57655889f9 /src/inet.c
parent27fd725c6d697b2e284b830ba989be2431147485 (diff)
downloadluasocket-2d51d6168874cdb2b72ee4f56f414d9a9a9d92e5.tar.gz
luasocket-2d51d6168874cdb2b72ee4f56f414d9a9a9d92e5.tar.bz2
luasocket-2d51d6168874cdb2b72ee4f56f414d9a9a9d92e5.zip
Fix "final" bug in pton and TCP connreset handling
Diffstat (limited to 'src/inet.c')
-rw-r--r--src/inet.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/inet.c b/src/inet.c
index 1f55d2a..1c44464 100644
--- a/src/inet.c
+++ b/src/inet.c
@@ -559,12 +559,11 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
559int inet_pton(int af, const char *src, void *dst) 559int inet_pton(int af, const char *src, void *dst)
560{ 560{
561 struct addrinfo hints, *res; 561 struct addrinfo hints, *res;
562 int ret = 1;
562 memset(&hints, 0, sizeof(struct addrinfo)); 563 memset(&hints, 0, sizeof(struct addrinfo));
563 hints.ai_family = af; 564 hints.ai_family = af;
564 hints.ai_flags = AI_NUMERICHOST; 565 hints.ai_flags = AI_NUMERICHOST;
565 if (getaddrinfo(src, NULL, &hints, &res) != 0) { 566 if (getaddrinfo(src, NULL, &hints, &res) != 0) return -1;
566 return -1;
567 }
568 if (af == AF_INET) { 567 if (af == AF_INET) {
569 struct sockaddr_in *in = (struct sockaddr_in *) res->ai_addr; 568 struct sockaddr_in *in = (struct sockaddr_in *) res->ai_addr;
570 memcpy(dst, &in->sin_addr, sizeof(in->sin_addr)); 569 memcpy(dst, &in->sin_addr, sizeof(in->sin_addr));
@@ -572,10 +571,10 @@ int inet_pton(int af, const char *src, void *dst)
572 struct sockaddr_in6 *in = (struct sockaddr_in6 *) res->ai_addr; 571 struct sockaddr_in6 *in = (struct sockaddr_in6 *) res->ai_addr;
573 memcpy(dst, &in->sin6_addr, sizeof(in->sin6_addr)); 572 memcpy(dst, &in->sin6_addr, sizeof(in->sin6_addr));
574 } else { 573 } else {
575 return -1; 574 ret = -1;
576 } 575 }
577 freeaddrinfo(res); 576 freeaddrinfo(res);
578 return 0; 577 return ret;
579} 578}
580 579
581#endif 580#endif