When calling getaddrinfo() for a listening socket, pass in a suggested type
[sgt/putty] / unix / uxnet.c
index 0312094..357fc86 100644 (file)
@@ -705,7 +705,7 @@ Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only, i
 #ifndef NO_IPV6
         hints.ai_flags = AI_NUMERICHOST;
         hints.ai_family = address_family;
-        hints.ai_socktype = 0;
+        hints.ai_socktype = SOCK_STREAM;
         hints.ai_protocol = 0;
         hints.ai_addrlen = 0;
         hints.ai_addr = NULL;
@@ -713,8 +713,10 @@ Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only, i
         hints.ai_next = NULL;
         sprintf(portstr, "%d", port);
         retcode = getaddrinfo(srcaddr, portstr, &hints, &ai);
-        addr = ai->ai_addr;
-        addrlen = ai->ai_addrlen;
+       if (retcode == 0) {
+           addr = ai->ai_addr;
+           addrlen = ai->ai_addrlen;
+       }
 #else
         memset(&a,'\0',sizeof(struct sockaddr_in));
         a.sin_family = AF_INET;
@@ -949,7 +951,6 @@ static int sk_tcp_write_oob(Socket sock, const char *buf, int len)
 static int net_select_result(int fd, int event)
 {
     int ret;
-    int err;
     char buf[20480];                  /* nice big buffer for plenty of speed */
     Actual_Socket s;
     u_long atmark;
@@ -1013,7 +1014,6 @@ static int net_select_result(int fd, int event)
            int t;  /* socket of connection */
 
            memset(&isa, 0, sizeof(struct sockaddr_in));
-           err = 0;
            t = accept(s->s,(struct sockaddr *)&isa,(socklen_t *) &addrlen);
            if (t < 0) {
                break;