roubustness only return 0 from fd service if handled 15/2915/1
authorAndy Green <andy.green@linaro.org>
Wed, 16 Jan 2013 05:40:43 +0000 (13:40 +0800)
committerKevron Rees <kevron_m_rees@linux.intel.com>
Thu, 7 Mar 2013 21:01:25 +0000 (13:01 -0800)
Otherwise our app outer loop will think the world is ending

Signed-off-by: Andy Green <andy.green@linaro.org>
lib/client.c
lib/libwebsockets.c

index 1fa35b0..027fb77 100644 (file)
@@ -63,7 +63,7 @@ int lws_client_socket_service(struct libwebsocket_context *context, struct libwe
 
                        libwebsocket_close_and_free_session(context, wsi,
                                                     LWS_CLOSE_STATUS_NOSTATUS);
-                       return 1;
+                       return 0;
                }
 
                n = recv(wsi->sock, pkt, sizeof pkt, 0);
@@ -71,7 +71,7 @@ int lws_client_socket_service(struct libwebsocket_context *context, struct libwe
                        libwebsocket_close_and_free_session(context, wsi,
                                                     LWS_CLOSE_STATUS_NOSTATUS);
                        lwsl_err("ERROR reading from proxy socket\n");
-                       return 1;
+                       return 0;
                }
 
                pkt[13] = '\0';
@@ -79,7 +79,7 @@ int lws_client_socket_service(struct libwebsocket_context *context, struct libwe
                        libwebsocket_close_and_free_session(context, wsi,
                                                     LWS_CLOSE_STATUS_NOSTATUS);
                        lwsl_err("ERROR from proxy: %s\n", pkt);
-                       return 1;
+                       return 0;
                }
 
                /* clear his proxy connection timeout */
@@ -171,15 +171,19 @@ int lws_client_socket_service(struct libwebsocket_context *context, struct libwe
                                                           "look good %d\n", n);
                                libwebsocket_close_and_free_session(context,
                                                wsi, LWS_CLOSE_STATUS_NOSTATUS);
-                               return 1;
+                               return 0;
                        }
                } else
                        wsi->ssl = NULL;
        #endif
 
                p = libwebsockets_generate_client_handshake(context, wsi, p);
-               if (p == NULL)
-                       return 1;
+               if (p == NULL) {
+                       lwsl_err("Failed to generate handshake for client, closing it\n");
+                       libwebsocket_close_and_free_session(context, wsi,
+                                                    LWS_CLOSE_STATUS_NOSTATUS);
+                       return 0;
+               }
 
                /* send our request to the server */
 
@@ -194,7 +198,7 @@ int lws_client_socket_service(struct libwebsocket_context *context, struct libwe
                        lwsl_debug("ERROR writing to client socket\n");
                        libwebsocket_close_and_free_session(context, wsi,
                                                     LWS_CLOSE_STATUS_NOSTATUS);
-                       return 1;
+                       return 0;
                }
 
                wsi->parser_state = WSI_TOKEN_NAME_PART;
@@ -271,7 +275,7 @@ bail3:
                        free(wsi->c_protocol);
                libwebsocket_close_and_free_session(context, wsi,
                                                    LWS_CLOSE_STATUS_NOSTATUS);
-               return 1;
+               return 0;
 
        case LWS_CONNMODE_WS_CLIENT_WAITING_EXTENSION_CONNECT:
                lwsl_ext("LWS_CONNMODE_WS_CLIENT_WAITING_EXTENSION_CONNECT\n");
index ff152f1..df90289 100644 (file)
@@ -868,7 +868,7 @@ libwebsocket_service_fd(struct libwebsocket_context *context,
                                if (errno != EINTR && errno != EAGAIN)
                                        libwebsocket_close_and_free_session(context,
                                                       wsi, LWS_CLOSE_STATUS_NOSTATUS);
-                               return 1;
+                               return 0;
                        }
                        if (!len) {
                                libwebsocket_close_and_free_session(context, wsi,
@@ -879,7 +879,7 @@ libwebsocket_service_fd(struct libwebsocket_context *context,
                        n = libwebsocket_read(context, wsi, buf, len);
                        if (n < 0)
                                /* we closed wsi */
-                               return 1;
+                               return 0;
                }
 
                /* this handles POLLOUT for http serving fragments */
@@ -1035,7 +1035,7 @@ libwebsocket_service_fd(struct libwebsocket_context *context,
                                                                       &clilen);
                if (accept_fd < 0) {
                        lwsl_warn("ERROR on accept %d\n", accept_fd);
-                       return -1;
+                       return 0;
                }
 
                if (context->fds_count >= MAX_CLIENTS) {
@@ -1089,7 +1089,7 @@ bail_prox_listener:
 
                        libwebsocket_close_and_free_session(context, wsi,
                                                       LWS_CLOSE_STATUS_NORMAL);
-                       return 1;
+                       return 0;
                }
 
                /*
@@ -1102,7 +1102,7 @@ bail_prox_listener:
                                                                 pollfd) < 0) {
                                libwebsocket_close_and_free_session(
                                        context, wsi, LWS_CLOSE_STATUS_NORMAL);
-                               return 1;
+                               return 0;
                        }
 
                /* any incoming data ready? */
@@ -1172,7 +1172,7 @@ bail_prox_listener:
 
                        libwebsocket_close_and_free_session(context, wsi,
                                                     LWS_CLOSE_STATUS_NOSTATUS);
-                       return 1;
+                       return 0;
                }
 
                /* the guy requested a callback when it was OK to write */
@@ -1183,7 +1183,7 @@ bail_prox_listener:
                                                                  pollfd) < 0) {
                                libwebsocket_close_and_free_session(
                                         context, wsi, LWS_CLOSE_STATUS_NORMAL);
-                               return 1;
+                               return 0;
                        }
 
 
@@ -1207,7 +1207,7 @@ read_pending:
                        if (errno != EINTR && errno != EAGAIN)
                                libwebsocket_close_and_free_session(context,
                                               wsi, LWS_CLOSE_STATUS_NOSTATUS);
-                       return 1;
+                       return 0;
                }
                if (!eff_buf.token_len) {
                        libwebsocket_close_and_free_session(context, wsi,
@@ -1246,7 +1246,7 @@ read_pending:
                                        libwebsocket_close_and_free_session(
                                                context, wsi,
                                                    LWS_CLOSE_STATUS_NOSTATUS);
-                                       return 1;
+                                       return 0;
                                }
                                if (m)
                                        more = 1;
@@ -1260,7 +1260,7 @@ read_pending:
                                                            eff_buf.token_len);
                                if (n < 0)
                                        /* we closed wsi */
-                                       return 1;
+                                       return 0;
                        }
 
                        eff_buf.token = NULL;