1
0
Fork 0
mirror of https://github.com/warmcat/libwebsockets.git synced 2025-03-09 00:00:04 +01:00

restore accept error as closure signal

Signed-off-by: Andy Green <andy.green@linaro.org>
This commit is contained in:
Andy Green 2012-07-20 12:58:38 +08:00
parent 915316644c
commit 3928f6178a
7 changed files with 27 additions and 16 deletions

View file

@ -53,6 +53,9 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sys/prctl.h> header file. */
#undef HAVE_SYS_PRCTL_H
/* Define to 1 if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H

2
configure vendored
View file

@ -12438,7 +12438,7 @@ fi
# Checks for header files.
for ac_header in zlib.h fcntl.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h
for ac_header in zlib.h fcntl.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h sys/prctl.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"

View file

@ -138,7 +138,8 @@ struct libwebsocket *__libwebsocket_client_connect_2(
wsi->mode = LWS_CONNMODE_WS_CLIENT_ISSUE_HANDSHAKE;
pfd.fd = wsi->sock;
pfd.revents = POLLIN;
libwebsocket_service_fd(context, &pfd);
if (libwebsocket_service_fd(context, &pfd) < 0)
goto oom4;
return wsi;

View file

@ -1529,8 +1529,8 @@ libwebsocket_service_fd(struct libwebsocket_context *context,
accept_fd = accept(pollfd->fd, (struct sockaddr *)&cli_addr,
&clilen);
if (accept_fd < 0) {
fprintf(stderr, "ERROR on accept");
break;
debug("ERROR on accept\n");
return -1;
}
/* Disable Nagle */
@ -1641,8 +1641,8 @@ libwebsocket_service_fd(struct libwebsocket_context *context,
accept_fd = accept(pollfd->fd, (struct sockaddr *)&cli_addr,
&clilen);
if (accept_fd < 0) {
fprintf(stderr, "ERROR on accept");
break;
debug("ERROR on accept\n");
return -1;
}
if (context->fds_count >= MAX_CLIENTS) {
@ -2174,15 +2174,16 @@ libwebsocket_service(struct libwebsocket_context *context, int timeout_ms)
/*
fprintf(stderr, "Listen Socket dead\n");
*/
return 1;
return -1;
}
/* handle accept on listening socket? */
for (n = 0; n < context->fds_count; n++)
if (context->fds[n].revents)
libwebsocket_service_fd(context, &context->fds[n]);
if (libwebsocket_service_fd(context,
&context->fds[n]) < 0)
return -1;
return 0;
}
@ -3030,7 +3031,7 @@ libwebsockets_fork_service_loop(struct libwebsocket_context *context)
while (1) {
if (libwebsocket_service(context, 1000))
return -1;
break;
#ifndef HAVE_SYS_PRCTL_H
/*
* on systems without prctl() (i.e. anything but linux) we can notice that our
@ -3044,7 +3045,7 @@ libwebsockets_fork_service_loop(struct libwebsocket_context *context)
}
return 0;
return 1;
}
#endif

View file

@ -287,6 +287,9 @@ int main(int argc, char **argv)
while (n >= 0 && !was_closed) {
n = libwebsocket_service(context, 1000);
if (n < 0)
continue;
if (wsi_mirror == NULL) {
/* create a client websocket using mirror protocol */

View file

@ -517,8 +517,9 @@ int main(int argc, char **argv)
* match anything under libwebsockets
* control
*/
libwebsocket_service_fd(context,
&pollfds[n]);
if (libwebsocket_service_fd(context,
&pollfds[n]))
goto done;
/* do our broadcast periodically */

View file

@ -463,7 +463,8 @@ int main(int argc, char **argv)
fprintf(stderr, " Using no-fork service loop\n");
while (1) {
n = 0;
while (n >= 0) {
struct timeval tv;
gettimeofday(&tv, NULL);
@ -495,10 +496,11 @@ int main(int argc, char **argv)
* "manually".
*
* If no socket is needing service, the call below returns
* immediately and quickly.
* immediately and quickly. Negative return means we are
* in process of closing
*/
libwebsocket_service(context, 50);
n = libwebsocket_service(context, 50);
}
#else