From d1d8a77bf60fdce43ca3ee45e9d51161d12de1b6 Mon Sep 17 00:00:00 2001 From: cpq Date: Mon, 7 Dec 2020 10:25:28 +0000 Subject: [PATCH] Use socketpair syscall when available --- mongoose.c | 8 ++++++++ src/sock.c | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/mongoose.c b/mongoose.c index cb2ce2a8..0af67edb 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2593,6 +2593,13 @@ static void accept_conn(struct mg_mgr *mgr, struct mg_connection *lsn) { #if MG_ENABLE_SOCKETPAIR bool mg_socketpair(int *s1, int *s2) { +#if MG_ARCH == MG_ARCH_UNIX + int sp[2], ret = 0; + if (socketpair(AF_INET, SOCK_DGRAM, 0) == 0) { + *s1 = sp[0], *s2 = sp[1], ret = 1; + } + return ret; +#else union usa sa, sa2; SOCKET sp[2] = {INVALID_SOCKET, INVALID_SOCKET}; socklen_t len = sizeof(sa.sin); @@ -2619,6 +2626,7 @@ bool mg_socketpair(int *s1, int *s2) { } return ret; +#endif } #endif diff --git a/src/sock.c b/src/sock.c index bbbbf1db..b824a8dc 100644 --- a/src/sock.c +++ b/src/sock.c @@ -356,6 +356,13 @@ static void accept_conn(struct mg_mgr *mgr, struct mg_connection *lsn) { #if MG_ENABLE_SOCKETPAIR bool mg_socketpair(int *s1, int *s2) { +#if MG_ARCH == MG_ARCH_UNIX + int sp[2], ret = 0; + if (socketpair(AF_INET, SOCK_DGRAM, 0) == 0) { + *s1 = sp[0], *s2 = sp[1], ret = 1; + } + return ret; +#else union usa sa, sa2; SOCKET sp[2] = {INVALID_SOCKET, INVALID_SOCKET}; socklen_t len = sizeof(sa.sin); @@ -382,6 +389,7 @@ bool mg_socketpair(int *s1, int *s2) { } return ret; +#endif } #endif