Use sockaddr_storage in accept call PAZ-872
authorAdam Dickmeiss <adam@indexdata.dk>
Sat, 18 May 2013 21:16:06 +0000 (23:16 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Sat, 18 May 2013 21:16:06 +0000 (23:16 +0200)
Due struct sockaddr is not big enough for IPV6 stuff.

src/http.c

index 6748bbe..8dc082d 100644 (file)
@@ -1176,21 +1176,21 @@ static struct http_channel *http_channel_create(http_server_t hs,
 static void http_accept(IOCHAN i, int event)
 {
     char host[256];
-    struct sockaddr addr;
+    struct sockaddr_storage addr;
     int fd = iochan_getfd(i);
-    socklen_t len;
+    socklen_t len = sizeof addr;
     int s;
     IOCHAN c;
     struct http_channel *ch;
     struct conf_server *server = iochan_getdata(i);
 
-    len = sizeof addr;
-    if ((s = accept(fd, &addr, &len)) < 0)
+    if ((s = accept(fd, (struct sockaddr *) &addr, &len)) < 0)
     {
         yaz_log(YLOG_WARN|YLOG_ERRNO, "accept");
         return;
     }
-    if (getnameinfo(&addr, len, host, sizeof(host)-1, 0, 0, NI_NUMERICHOST))
+    if (getnameinfo((struct sockaddr *) &addr, len, host, sizeof(host)-1, 0, 0,
+        NI_NUMERICHOST))
     {
         yaz_log(YLOG_WARN|YLOG_ERRNO, "getnameinfo");
         CLOSESOCKET(s);