diff --git a/changelog b/changelog
index 8b79f121a958bb98e0d7b6c277b5d4f9f8ad5c24..f6b85d94cbccca7c321f3f08fa18e2ccd053d841 100644
--- a/changelog
+++ b/changelog
@@ -28,6 +28,9 @@ User api additions
then does not have to try to track while connections it choked, this
will free up all of them in one call.
+ - there's a new, optional callback LWS_CALLBACK_CLOSED_HTTP which gets
+ called when an HTTP protocol socket closes
+
User api changes
----------------
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index d312390d4cae554ab98d0e8322d99d580c6e6f83..e75a51009edcd622071c906cad8912dbe60a70f9 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -210,6 +210,8 @@ libwebsocket_close_and_free_session(struct libwebsocket_context *context,
lwsl_debug("closing http fd %d\n", wsi->u.http.fd);
close(wsi->u.http.fd);
wsi->u.http.fd = 0;
+ context->protocols[0].callback(context, wsi,
+ LWS_CALLBACK_CLOSED_HTTP, wsi->user_space, NULL, 0);
}
#ifndef LWS_NO_EXTENSIONS
diff --git a/lib/libwebsockets.h b/lib/libwebsockets.h
index 65bae14534e93213fd1315feff6b17ada613f8bb..9f686bd8796f5ed3097904cf3ab9fff85427292a 100644
--- a/lib/libwebsockets.h
+++ b/lib/libwebsockets.h
@@ -138,6 +138,7 @@ enum libwebsocket_callback_reasons {
LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH,
LWS_CALLBACK_CLIENT_ESTABLISHED,
LWS_CALLBACK_CLOSED,
+ LWS_CALLBACK_CLOSED_HTTP,
LWS_CALLBACK_RECEIVE,
LWS_CALLBACK_CLIENT_RECEIVE,
LWS_CALLBACK_CLIENT_RECEIVE_PONG,
@@ -419,6 +420,8 @@ struct libwebsocket_extension;
*
* LWS_CALLBACK_CLOSED: when the websocket session ends
*
+ * LWS_CALLBACK_CLOSED_HTTP: when a HTTP (non-websocket) session ends
+ *
* LWS_CALLBACK_RECEIVE: data has appeared for this server endpoint from a
* remote client, it can be found at *in and is
* len bytes long