From b96c08f35c2afd07daf261451daad7004c73f42d Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Fri, 16 Oct 2015 14:43:38 -0400 Subject: [PATCH] Fixed nginx listen() bug --- netcon/Intercept.c | 6 +++--- netcon/NetconEthernetTap.cpp | 8 ++++++-- netcon/libintercept.so.1.0 | Bin 0 -> 45880 bytes 3 files changed, 9 insertions(+), 5 deletions(-) create mode 100755 netcon/libintercept.so.1.0 diff --git a/netcon/Intercept.c b/netcon/Intercept.c index bb5cf9ce7..aed7d1855 100755 --- a/netcon/Intercept.c +++ b/netcon/Intercept.c @@ -740,8 +740,8 @@ int listen(LISTEN_SIG) memcpy(&cmd[1], &rpc_st, sizeof(struct listen_st)); pthread_mutex_lock(&lock); send_command(fdret_sock, cmd); - err = get_retval(); + //err = get_retval(); pthread_mutex_unlock(&lock); - errno = ERR_OK; - return err; + //errno = ERR_OK; + return ERR_OK; } diff --git a/netcon/NetconEthernetTap.cpp b/netcon/NetconEthernetTap.cpp index 72d6273a2..462e366da 100644 --- a/netcon/NetconEthernetTap.cpp +++ b/netcon/NetconEthernetTap.cpp @@ -925,6 +925,7 @@ void NetconEthernetTap::handle_listen(PhySocket *sock, void **uptr, struct liste send_return_value(conn, ERR_OK, ERR_OK); } else { + /* fprintf(stderr, "handle_listen(): unable to allocate memory for new listening PCB\n"); // FIXME: This does not have an equivalent errno value // lwip will reclaim space with a tcp_listen call since a PCB in a LISTEN @@ -933,13 +934,16 @@ void NetconEthernetTap::handle_listen(PhySocket *sock, void **uptr, struct liste // socket, even if the reason isn't describing what really happened internally. // See: http://lwip.wikia.com/wiki/Raw/TCP send_return_value(conn, -1, EBADF); - } + */ + } } else { + /* // We can't find a connection mapped to the socket fd provided fprintf(stderr, "handle_listen(): can't locate connection for PCB\n"); send_return_value(conn, -1, EBADF); - } + */ + } } /* diff --git a/netcon/libintercept.so.1.0 b/netcon/libintercept.so.1.0 new file mode 100755 index 0000000000000000000000000000000000000000..bb203d647b4f6fa34da84a048d294c60dffe99d7 GIT binary patch literal 45880 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