summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Grin (Karlson2k) <k2k@narod.ru>2016-04-08 18:40:58 +0000
committerEvgeny Grin (Karlson2k) <k2k@narod.ru>2016-04-08 18:40:58 +0000
commit085bc845053128b653963c0c563dfa09902f3ec1 (patch)
tree7b3c2ad0c6dffad6e374f7d4d097383e7d6aa53b
parent1057677e86cd776489c9417f2d7f3a8018932891 (diff)
Reworked calling shutdown() on connections:
Now called on all platforms (including W32), called only with SHUT_WR, except in close_all_connections() where shutdown() called with SHUT_RDWR. This should increase chances of graceful disconnection.
-rw-r--r--ChangeLog6
-rw-r--r--src/microhttpd/connection.c3
-rw-r--r--src/microhttpd/daemon.c13
3 files changed, 8 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 5b3ef9e5..53b0e08c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Apr 08 18:32:17 CET 2016
+ Some minor internal fixes, addition error checking and
+ micro optimizations.
+ Reworked usage of sockets shutdown() - now work equally
+ on all platforms, disconnection should be "more graceful". -EG
+
Tue Mar 15 21:52:27 CET 2016
Do not crash if pthread_create() fails. -DD
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index 279a335f..3aa0d16c 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -479,8 +479,7 @@ MHD_connection_close_ (struct MHD_Connection *connection,
daemon = connection->daemon;
if (0 == (connection->daemon->options & MHD_USE_EPOLL_TURBO))
- shutdown (connection->socket_fd,
- (MHD_YES == connection->read_closed) ? SHUT_WR : SHUT_RDWR);
+ shutdown (connection->socket_fd, SHUT_WR);
connection->state = MHD_CONNECTION_CLOSED;
connection->event_loop_info = MHD_EVENT_LOOP_INFO_CLEANUP;
if ( (NULL != daemon->notify_completed) &&
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 8ef00bd9..ea958204 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -1078,9 +1078,7 @@ exit:
MHD_CONNECTION_NOTIFY_CLOSED);
if (MHD_INVALID_SOCKET != con->socket_fd)
{
-#ifdef WINDOWS
shutdown (con->socket_fd, SHUT_WR);
-#endif
if (0 != MHD_socket_close_ (con->socket_fd))
MHD_PANIC ("close failed\n");
con->socket_fd = MHD_INVALID_SOCKET;
@@ -2115,9 +2113,6 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
}
if (MHD_INVALID_SOCKET != pos->socket_fd)
{
-#ifdef WINDOWS
- shutdown (pos->socket_fd, SHUT_WR);
-#endif
if (0 != MHD_socket_close_ (pos->socket_fd))
MHD_PANIC ("close failed\n");
}
@@ -3733,11 +3728,6 @@ MHD_start_daemon_va (unsigned int flags,
daemon->socket_fd = MHD_INVALID_SOCKET;
daemon->listening_address_reuse = 0;
daemon->options = flags;
-#if defined(MHD_WINSOCK_SOCKETS) || defined(CYGWIN)
- /* Winsock is broken with respect to 'shutdown';
- this disables us calling 'shutdown' on W32. */
- daemon->options |= MHD_USE_EPOLL_TURBO;
-#endif
daemon->port = port;
daemon->apc = apc;
daemon->apc_cls = apc_cls;
@@ -4451,8 +4441,7 @@ close_all_connections (struct MHD_Daemon *daemon)
MHD_PANIC ("MHD_stop_daemon() called while we have suspended connections.\n");
for (pos = daemon->connections_head; NULL != pos; pos = pos->next)
{
- shutdown (pos->socket_fd,
- (MHD_YES == pos->read_closed) ? SHUT_WR : SHUT_RDWR);
+ shutdown (pos->socket_fd, SHUT_RDWR);
#if MHD_WINSOCK_SOCKETS
if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) &&
(MHD_INVALID_PIPE_ != daemon->wpipe[1]) &&