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 zcmeIbd0P*RKm%$X z#ezfC$`iExTD59zYg_Bk(n=j`ovO99uhLibB@Pv5t=4=$pS|}w_uQML@BQBQ_x=9$ z4&>~$)?RDvwbx#IpMCD$=bYV3mM`_$wk3z(I>RD%GD}m6Ovaq=830LH8}6@NSm@K=bx8Tgxt zzghU3jXxg0U9tVeVysLQIj)9F=rL7xydJ@y zddYHmtws?LkGm(zdmYIpfFO>)-!n?d_~yzlYySb>mu?TH(Nff_PHW`l8?0 z5C5 zT*j1Ffeu7Gw+zyB_Ddca_#=JeD1|C{LXOeX64G=T^8KJ^V+=T2s52(&Z0mlc)Dtqs zrWpFC;Lig89K&zO)`I}3=R|@YKgKKaJJUkKs#2&?`U{MHju$+Njh%Z;ee21HqXB8Q zm17kc{W7leGC(_@GkTg0|4F1-;7_!3J?P|DgBoPb<;i-}=s9Zq`46M#OvB%j;Qvz$ ze~T&iJm5T@!yok*CA7;o4gDYoX&mS4#JbJsKRQ|yerxD!ky4Lbhs|Zu+GO|(IEdpI zYwWxjuqro4k*yVmUTXMH4%74$bNzVS@SimHEY{hU)fQ>0tFCR{wymbA&Z^tdYE@T9 zT3ef%s~ekZYoZO!P1fc}w7NAC-ComZH8eFutJ@;2+Z$>l5Nc|Q)GC&?#z>^aYJp&L zs}NVb963>jz?kZB}p zwe4!Ft!Zpb(5AGIqq@Eh6|JdD$Zu~_9HzQfeQi^;5#=uPG1p(wPq zv0)qR(}WpTV?$ds(qy%?Hg9gK*%pD_up!z2s4d!BZ-6?u&Z`ARY&S- zqBUsbO>J$}ZPA+6C`d4W+49mwi>s&QPs^XFBEx6>*Z=ulUfcTb{9}QXJBHZJ0vy6$ z`>+PgMf{$5k8M3|@{w)weQti@IPpVHUU0}f6QUOTuzQ$!Ba@^seXA2SOeIB~ZeVP4$hwhy>9`n%6(5$pQ z;h|4Z6n%QmL)Se|(_it>&5*4!PI&0%lB4Kd9{OOdLY+@~=w_;+=%0D$c^-btTyGf* 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