diff options
author | Christian Grothoff <christian@grothoff.org> | 2007-08-19 08:45:43 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2007-08-19 08:45:43 +0000 |
commit | fc6a31231af76afb7e6c4dfe15a3e009f2e518fc (patch) | |
tree | 042112a34429393bc2ac338ba8f41b5a5e573d7d | |
parent | 806387b6052d1892b511a9701117a33591c1aa05 (diff) |
more logging and fix in usec calculation
-rw-r--r-- | src/daemon/connection.c | 51 | ||||
-rw-r--r-- | src/daemon/daemon.c | 28 |
2 files changed, 76 insertions, 3 deletions
diff --git a/src/daemon/connection.c b/src/daemon/connection.c index 6735147a..864e1190 100644 --- a/src/daemon/connection.c +++ b/src/daemon/connection.c @@ -43,6 +43,19 @@ #define REQUEST_TOO_BIG "" /** + * Add extra debug messages with reasons for closing connections + * (non-error reasons). + */ +#define DEBUG_CLOSE 0 + + +/** + * Should all data send be printed to stderr? + */ +#define DEBUG_SEND_DATA 0 + + +/** * Get all of the headers from the request. * * @param iterator callback to call on each header; @@ -179,6 +192,10 @@ ready_response (struct MHD_Connection *connection) if (ret == -1) { /* end of message, signal other side by closing! */ +#if DEBUG_CLOSE + MHD_DLOG (connection->daemon, + "Closing connection (end of response)\n"); +#endif response->total_size = connection->messagePos; CLOSE (connection->socket_fd); connection->socket_fd = -1; @@ -693,6 +710,8 @@ MHD_parse_connection_headers (struct MHD_Connection *connection) MHD_parse_cookie_header (connection); return; DIE: + MHD_DLOG (connection->daemon, + "Closing connection (problem parsing headers)\n"); CLOSE (connection->socket_fd); connection->socket_fd = -1; } @@ -930,6 +949,10 @@ MHD_connection_handle_read (struct MHD_Connection *connection) connection->read_close = MHD_YES; if (connection->readLoc > 0) MHD_call_connection_handler (connection); +#if DEBUG_CLOSE + MHD_DLOG (connection->daemon, + "Shutting down connection for reading (other side closed connection)\n"); +#endif shutdown (connection->socket_fd, SHUT_RD); return MHD_YES; } @@ -1096,7 +1119,12 @@ MHD_connection_handle_write (struct MHD_Connection *connection) connection->socket_fd = -1; return MHD_YES; } - connection->continuePos += ret; +#if DEBUG_SEND_DATA + fprintf(stderr, + "Sent 100 continue response: `%.*s'\n", + ret, + &HTTP_100_CONTINUE[connection->continuePos]); +#endif return MHD_YES; } response = connection->response; @@ -1111,6 +1139,8 @@ MHD_connection_handle_write (struct MHD_Connection *connection) (MHD_NO == MHD_build_header_response (connection))) { /* oops - close! */ + MHD_DLOG (connection->daemon, + "Closing connection (failed to create response header)\n"); CLOSE (connection->socket_fd); connection->socket_fd = -1; return MHD_NO; @@ -1128,6 +1158,12 @@ MHD_connection_handle_write (struct MHD_Connection *connection) connection->socket_fd = -1; return MHD_YES; } +#if DEBUG_SEND_DATA + fprintf(stderr, + "Sent HEADER response: `%.*s'\n", + ret, + &connection->write_buffer[connection->writePos]); +#endif connection->writePos += ret; if (connection->writeLoc == connection->writePos) { @@ -1173,6 +1209,12 @@ MHD_connection_handle_write (struct MHD_Connection *connection) connection->socket_fd = -1; return MHD_YES; } +#if DEBUG_SEND_DATA + fprintf(stderr, + "Sent DATA response: `%.*s'\n", + ret, + &response->data[connection->messagePos - response->data_start]); +#endif connection->messagePos += ret; if (connection->messagePos > response->total_size) abort (); /* internal error */ @@ -1196,8 +1238,13 @@ MHD_connection_handle_write (struct MHD_Connection *connection) (0 != strcasecmp (MHD_HTTP_VERSION_1_1, connection->version))) { /* closed for reading => close for good! */ - if (connection->socket_fd != -1) + if (connection->socket_fd != -1) { +#if DEBUG_CLOSE + MHD_DLOG (connection->daemon, + "Closing connection (http 1.0 or end-of-stream for unknown content length)\n"); +#endif CLOSE (connection->socket_fd); + } connection->socket_fd = -1; } connection->version = NULL; diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c index 385e37c3..79963d6b 100644 --- a/src/daemon/daemon.c +++ b/src/daemon/daemon.c @@ -41,6 +41,12 @@ #define MHD_POOL_SIZE_DEFAULT (1024 * 1024) /** + * Print extra messages with reasons for closing + * sockets? (only adds non-error messages). + */ +#define DEBUG_CLOSE 0 + +/** * Register an access handler for all URIs beginning with uri_prefix. * * @param uri_prefix @@ -218,6 +224,10 @@ MHD_handle_connection (void *data) } if (con->socket_fd != -1) { +#if DEBUG_CLOSE + MHD_DLOG (con->daemon, + "Processing thread terminating, closing connection\n"); +#endif CLOSE (con->socket_fd); con->socket_fd = -1; } @@ -263,6 +273,10 @@ MHD_accept_connection (struct MHD_Daemon *daemon) if ((daemon->apc != NULL) && (MHD_NO == daemon->apc (daemon->apc_cls, addr, addrlen))) { +#if DEBUG_CLOSE + MHD_DLOG (daemon, + "Connection rejected, closing connection\n"); +#endif CLOSE (s); return MHD_YES; } @@ -334,6 +348,10 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon) { if ((pos->last_activity < timeout) && (pos->socket_fd != -1)) { +#if DEBUG_CLOSE + MHD_DLOG (daemon, + "Connection timed out, closing connection\n"); +#endif CLOSE (pos->socket_fd); pos->socket_fd = -1; } @@ -470,7 +488,7 @@ MHD_select (struct MHD_Daemon *daemon, int may_block) /* ltimeout is in ms */ if (MHD_YES == MHD_get_timeout (daemon, <imeout)) { - timeout.tv_usec = (ltimeout % 1000) * 1000 * 1000; + timeout.tv_usec = (ltimeout % 1000) * 1000; timeout.tv_sec = ltimeout / 1000; may_block = MHD_NO; } @@ -705,6 +723,10 @@ MHD_stop_daemon (struct MHD_Daemon *daemon) daemon->shutdown = MHD_YES; fd = daemon->socket_fd; daemon->socket_fd = -1; +#if DEBUG_CLOSE + MHD_DLOG (daemon, + "MHD shutdown, closing listen socket\n"); +#endif CLOSE (fd); if ((0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) || (0 != (daemon->options & MHD_USE_SELECT_INTERNALLY))) @@ -716,6 +738,10 @@ MHD_stop_daemon (struct MHD_Daemon *daemon) { if (-1 != daemon->connections->socket_fd) { +#if DEBUG_CLOSE + MHD_DLOG (daemon, + "MHD shutdown, closing active connections\n"); +#endif CLOSE (daemon->connections->socket_fd); daemon->connections->socket_fd = -1; } |