cleanup-proxy-code--add-timeout.patch
authorAndy Green <andy@warmcat.com>
Fri, 28 Jan 2011 09:39:29 +0000 (09:39 +0000)
committerAndy Green <andy@warmcat.com>
Fri, 28 Jan 2011 09:39:29 +0000 (09:39 +0000)
Signed-off-by: Andy Green <andy@warmcat.com>
lib/client-handshake.c

index aa3fd6f..e5d5351 100644 (file)
@@ -191,22 +191,31 @@ libwebsocket_client_connect(struct libwebsocket_context *this,
 
        /* we are connected to server, or proxy */
 
-       /* non-SSL connection */
-
        if (this->http_proxy_port) {
 
                n = send(wsi->sock, pkt, plen, 0);
                if (n < 0) {
-                       fprintf(stderr, "ERROR writing to "
-                                                     "proxy socket\n");
+                       close(wsi->sock);
+                       fprintf(stderr, "ERROR writing to proxy socket\n");
+                       goto bail1;
+               }
+
+               pfd.fd = wsi->sock;
+               pfd.events = POLLIN;
+               pfd.revents = 0;
+
+               n = poll(&pfd, 1, 5000);
+               if (n <= 0) {
+                       close(wsi->sock);
+                       fprintf(stderr, "libwebsocket_client_handshake "
+                                       "timeout on proxy response");
                        goto bail1;
                }
 
                n = recv(wsi->sock, pkt, sizeof pkt, 0);
                if (n < 0) {
                        close(wsi->sock);
-                       fprintf(stderr, "ERROR reading from "
-                                                     "proxy socket\n");
+                       fprintf(stderr, "ERROR reading from proxy socket\n");
                        goto bail1;
                }