diff --git a/docs/c-api/net.h/struct_mg_mgr.md b/docs/c-api/net.h/struct_mg_mgr.md
index cc77903650511c142a611b9405d71b2ff9d4f292..384f15f6268e2f9aeaefbbe884f60d887a604beb 100644
--- a/docs/c-api/net.h/struct_mg_mgr.md
+++ b/docs/c-api/net.h/struct_mg_mgr.md
@@ -8,7 +8,7 @@ signature: |
   #if MG_ENABLE_HEXDUMP
     const char *hexdump_file; /* Debug hexdump file path */
   #endif
-  #if !MG_DISABLE_SOCKETPAIR
+  #if MG_ENABLE_BROADCAST
     sock_t ctl[2]; /* Socketpair for mg_broadcast() */
   #endif
     void *user_data; /* User data */
diff --git a/docs/overview/build-options/disabling-flags.md b/docs/overview/build-options/disabling-flags.md
index ac5efee3a67d069867592fcb42db5f1186855d5e..8633083f3a13213c4b401a86ce0a41d2a6b92c2d 100644
--- a/docs/overview/build-options/disabling-flags.md
+++ b/docs/overview/build-options/disabling-flags.md
@@ -5,5 +5,4 @@ title: Disabling flags
 - `MG_DISABLE_HTTP_DIGEST_AUTH` disable HTTP Digest (MD5) authorisation support
 - `MG_DISABLE_SHA1` disable SHA1 support (used by WebSocket)
 - `MG_DISABLE_MD5` disable MD5 support (used by HTTP auth)
-- `MG_DISABLE_SOCKETPAIR` disable `mg_broadcast()` API
 - `MG_DISABLE_HTTP_KEEP_ALIVE` useful for embedded systems to save resources
diff --git a/docs/overview/build-options/enabling-flags.md b/docs/overview/build-options/enabling-flags.md
index 300beb53f623143b8e8672d6fe38b925b66b4827..6e7f6c264501cc6827cbf4229ce8ec8db97df6b9 100644
--- a/docs/overview/build-options/enabling-flags.md
+++ b/docs/overview/build-options/enabling-flags.md
@@ -3,7 +3,7 @@ title: Enabling flags
 ---
 
 - `MG_ENABLE_SSL` Enable [SSL/TLS support](https://docs.cesanta.com/mongoose/master/#/http/ssl.md/) (OpenSSL API)
-- `MG_ENABLE_IPV6` Enable IPV6 support
+- `MG_ENABLE_IPV6` Enable IPv6 support
 - `MG_ENABLE_MQTT` enable [MQTT client](https://docs.cesanta.com/mongoose/master/#/mqtt/client_example.md/)
 - `MG_ENABLE_MQTT_BROKER` enable [MQTT broker](https://docs.cesanta.com/mongoose/master/#/mqtt/server_example.md/)
 - `MG_ENABLE_DNS_SERVER` enable DNS server
@@ -14,5 +14,6 @@ title: Enabling flags
 - `MG_ENABLE_HTTP_SSI_EXEC` Enable SSI `exec` operator
 - `MG_ENABLE_HTTP_WEBDAV` enable WebDAV extensions to HTTP
 - `MG_ENABLE_HTTP_WEBSOCKET` enable WebSocket extension to HTTP (on by default, =0 to disable)
+- `MG_ENABLE_BROADCAST` enable `mg_broadcast()` API
 - `MG_ENABLE_GETADDRINFO` enable `getaddrinfo()` in `mg_resolve2()`
 - `MG_ENABLE_THREADS` enable `mg_start_thread()` API
diff --git a/mongoose.c b/mongoose.c
index 37d2db59de5b2517e1f88000c0f321a90cf2393d..4f09135886612379a4e56994548ce7c11ac27ba6 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -45,7 +45,6 @@
 
 #ifdef PICOTCP
 #define NO_LIBC
-#define MG_DISABLE_SOCKETPAIR
 #define MG_DISABLE_PFS
 #endif
 
@@ -1864,7 +1863,7 @@ void mg_close_conn(struct mg_connection *conn) {
 
 void mg_mgr_init(struct mg_mgr *m, void *user_data) {
   memset(m, 0, sizeof(*m));
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
   m->ctl[0] = m->ctl[1] = INVALID_SOCKET;
 #endif
   m->user_data = user_data;
@@ -1929,7 +1928,7 @@ void mg_mgr_free(struct mg_mgr *m) {
   /* Do one last poll, see https://github.com/cesanta/mongoose/issues/286 */
   mg_mgr_poll(m, 0);
 
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
   if (m->ctl[0] != INVALID_SOCKET) closesocket(m->ctl[0]);
   if (m->ctl[1] != INVALID_SOCKET) closesocket(m->ctl[1]);
   m->ctl[0] = m->ctl[1] = INVALID_SOCKET;
@@ -2688,7 +2687,7 @@ struct mg_connection *mg_next(struct mg_mgr *s, struct mg_connection *conn) {
   return conn == NULL ? s->active_connections : conn->next;
 }
 
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
 void mg_broadcast(struct mg_mgr *mgr, mg_event_handler_t cb, void *data,
                   size_t len) {
   struct ctl_msg ctl_msg;
@@ -2712,7 +2711,7 @@ void mg_broadcast(struct mg_mgr *mgr, mg_event_handler_t cb, void *data,
     (void) dummy; /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509 */
   }
 }
-#endif /* MG_DISABLE_SOCKETPAIR */
+#endif /* MG_ENABLE_BROADCAST */
 
 static int isbyte(int n) {
   return n >= 0 && n <= 255;
@@ -3263,7 +3262,7 @@ void mg_mgr_handle_conn(struct mg_connection *nc, int fd_flags, double now) {
        (int) nc->recv_mbuf.len, (int) nc->send_mbuf.len));
 }
 
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
 static void mg_mgr_handle_ctl_sock(struct mg_mgr *mgr) {
   struct ctl_msg ctl_msg;
   int len =
@@ -3291,7 +3290,7 @@ void mg_sock_set(struct mg_connection *nc, sock_t sock) {
 void mg_ev_mgr_init(struct mg_mgr *mgr) {
   (void) mgr;
   DBG(("%p using select()", mgr));
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
   do {
     mg_socketpair(mgr->ctl, SOCK_DGRAM);
   } while (mgr->ctl[0] == INVALID_SOCKET);
@@ -3338,7 +3337,7 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
   FD_ZERO(&read_set);
   FD_ZERO(&write_set);
   FD_ZERO(&err_set);
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
   mg_add_to_set(mgr->ctl[1], &read_set, &max_fd);
 #endif
 
@@ -3408,7 +3407,7 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
   DBG(("select @ %ld num_ev=%d of %d, timeout=%d", (long) now, num_ev, num_fds,
        timeout_ms));
 
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
   if (num_ev > 0 && mgr->ctl[1] != INVALID_SOCKET &&
       FD_ISSET(mgr->ctl[1], &read_set)) {
     mg_mgr_handle_ctl_sock(mgr);
@@ -3446,7 +3445,7 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
   return (time_t) now;
 }
 
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
 int mg_socketpair(sock_t sp[2], int sock_type) {
   union socket_address sa;
   sock_t sock;
@@ -3488,7 +3487,7 @@ int mg_socketpair(sock_t sp[2], int sock_type) {
 
   return ret;
 }
-#endif /* MG_DISABLE_SOCKETPAIR */
+#endif /* MG_ENABLE_BROADCAST */
 
 static void mg_sock_get_addr(sock_t sock, int remote,
                              union socket_address *sa) {
diff --git a/mongoose.h b/mongoose.h
index 1c0fcd811d7ccfe96e1a5154595abd2b1a354410..2352562a23879f1708061cb2c478463e05beff7a 100644
--- a/mongoose.h
+++ b/mongoose.h
@@ -249,6 +249,10 @@ typedef struct _stati64 cs_stat_t;
 #define CS_ENABLE_STDIO 1
 #endif
 
+#ifndef MG_ENABLE_BROADCAST
+#define MG_ENABLE_BROADCAST 1
+#endif
+
 #ifndef MG_ENABLE_DIRECTORY_LISTING
 #define MG_ENABLE_DIRECTORY_LISTING 1
 #endif
@@ -257,6 +261,10 @@ typedef struct _stati64 cs_stat_t;
 #define MG_ENABLE_FILESYSTEM 1
 #endif
 
+#ifndef MG_ENABLE_HTTP_CGI
+#define MG_ENABLE_HTTP_CGI 1
+#endif
+
 #endif /* CS_PLATFORM == CS_P_WINDOWS */
 #endif /* CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ */
 #ifdef MG_MODULE_LINES
@@ -363,6 +371,10 @@ typedef struct stat cs_stat_t;
 #define CS_ENABLE_STDIO 1
 #endif
 
+#ifndef MG_ENABLE_BROADCAST
+#define MG_ENABLE_BROADCAST 1
+#endif
+
 #ifndef MG_ENABLE_DIRECTORY_LISTING
 #define MG_ENABLE_DIRECTORY_LISTING 1
 #endif
@@ -371,6 +383,10 @@ typedef struct stat cs_stat_t;
 #define MG_ENABLE_FILESYSTEM 1
 #endif
 
+#ifndef MG_ENABLE_HTTP_CGI
+#define MG_ENABLE_HTTP_CGI 1
+#endif
+
 #endif /* CS_PLATFORM == CS_P_UNIX */
 #endif /* CS_COMMON_PLATFORMS_PLATFORM_UNIX_H_ */
 #ifdef MG_MODULE_LINES
@@ -462,7 +478,6 @@ void mg_lwip_set_keepalive_params(struct mg_connection *nc, int idle,
 #include <time.h>
 
 #define MG_SOCKET_SIMPLELINK 1
-#define MG_DISABLE_SOCKETPAIR 1
 #define MG_DISABLE_SYNC_RESOLVER 1
 
 /*
@@ -517,7 +532,6 @@ int inet_pton(int af, const char *src, void *dst);
 #endif
 
 #define MG_SOCKET_SIMPLELINK 1
-#define MG_DISABLE_SOCKETPAIR 1
 #define MG_DISABLE_SYNC_RESOLVER 1
 
 /* Only SPIFFS supports directories, SLFS does not. */
@@ -653,7 +667,6 @@ struct dirent *readdir(DIR *dir);
 #endif
 
 #define MG_SOCKET_SIMPLELINK 1
-#define MG_DISABLE_SOCKETPAIR 1
 #define MG_DISABLE_SYNC_RESOLVER 1
 
 /* Amalgamated: #include "common/platforms/simplelink/cs_simplelink.h" */
@@ -1393,10 +1406,6 @@ const char *c_strnstr(const char *s, const char *find, size_t slen);
 #define MG_DISABLE_SOCKET_IF 0
 #endif
 
-#ifndef MG_DISABLE_SOCKETPAIR
-#define MG_DISABLE_SOCKETPAIR 0
-#endif
-
 #ifndef MG_DISABLE_SYNC_RESOLVER
 #define MG_DISABLE_SYNC_RESOLVER 0
 #endif
@@ -1405,13 +1414,8 @@ const char *c_strnstr(const char *s, const char *find, size_t slen);
 #define MG_DISABLE_WS_RANDOM_MASK 0
 #endif
 
-#ifndef MG_ENABLE_HTTP
-#define MG_ENABLE_HTTP 1
-#endif
-
-#ifndef MG_ENABLE_HTTP_CGI
-#define MG_ENABLE_HTTP_CGI \
-  (CS_PLATFORM == CS_P_UNIX || CS_PLATFORM == CS_P_WINDOWS)
+#ifndef MG_ENABLE_BROADCAST
+#define MG_ENABLE_BROADCAST 0
 #endif
 
 #ifndef MG_ENABLE_COAP
@@ -1446,6 +1450,14 @@ const char *c_strnstr(const char *s, const char *find, size_t slen);
 #define MG_ENABLE_HEXDUMP CS_ENABLE_STDIO
 #endif
 
+#ifndef MG_ENABLE_HTTP
+#define MG_ENABLE_HTTP 1
+#endif
+
+#ifndef MG_ENABLE_HTTP_CGI
+#define MG_ENABLE_HTTP_CGI 0
+#endif
+
 #ifndef MG_ENABLE_HTTP_SSI
 #define MG_ENABLE_HTTP_SSI MG_ENABLE_FILESYSTEM
 #endif
@@ -1505,8 +1517,6 @@ const char *c_strnstr(const char *s, const char *find, size_t slen);
 #ifdef MG_NO_BSD_SOCKETS
 #undef MG_DISABLE_SYNC_RESOLVER
 #define MG_DISABLE_SYNC_RESOLVER 1
-#undef MG_DISABLE_SOCKETPAIR
-#define MG_DISABLE_SOCKETPAIR 1
 #endif /* MG_NO_BSD_SOCKETS */
 
 /* MQTT broker requires MQTT */
@@ -1617,7 +1627,7 @@ struct mg_mgr {
 #if MG_ENABLE_HEXDUMP
   const char *hexdump_file; /* Debug hexdump file path */
 #endif
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
   sock_t ctl[2]; /* Socketpair for mg_broadcast() */
 #endif
   void *user_data; /* User data */
@@ -1723,7 +1733,7 @@ void mg_mgr_free(struct mg_mgr *);
  */
 time_t mg_mgr_poll(struct mg_mgr *, int milli);
 
-#if !MG_DISABLE_SOCKETPAIR
+#if MG_ENABLE_BROADCAST
 /*
  * Passes a message of a given length to all connections.
  *