Introduction
Introduction Statistics Contact Development Disclaimer Help
Add lingerie to all socks. - geomyidae - a small C-based gopherd (mirror)
git clone git://git.codemadness.org/geomyidae
Log
Files
Refs
README
LICENSE
---
commit 89ed3ff980bfd8b1a6405be67565b1de3b393ac3
parent 41aaba3aa82bbe810c1008246b2b226e7395fe1e
Author: Christoph Lohmann <[email protected]>
Date: Sun, 23 Jul 2023 14:23:26 +0200
Add lingerie to all socks.
* fix TLS connection shutdown
Diffstat:
M ind.c | 28 ++++++++++++++++++++++++++++
M ind.h | 1 +
M main.c | 34 +++--------------------------…
3 files changed, 32 insertions(+), 31 deletions(-)
---
diff --git a/ind.c b/ind.c
@@ -630,3 +630,31 @@ humantime(const time_t *clock)
return buf;
}
+void
+lingersock(int sock)
+{
+ struct linger lingerie;
+ int j;
+
+ /*
+ * On close only wait for at maximum 60 seconds for all data to be
+ * transmitted before forcefully closing the connection.
+ */
+ lingerie.l_onoff = 1;
+ lingerie.l_linger = 60;
+ setsockopt(sock, SOL_SOCKET, SO_LINGER,
+ &lingerie, sizeof(lingerie));
+
+ /*
+ * Force explicit flush of buffers using TCP_NODELAY.
+ */
+ j = 1;
+ setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &j, sizeof(int));
+ waitforpendingbytes(sock);
+ j = 0;
+ setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &j, sizeof(int));
+ shutdown(sock, SHUT_RDWR);
+
+ return;
+}
+
diff --git a/ind.h b/ind.h
@@ -54,6 +54,7 @@ void setcgienviron(char *file, char *path, char *port, char *…
char *bhost, int istls, char *sel, char *traverse);
char *humansize(off_t n);
char *humantime(const time_t *clock);
+void lingersock(int sock);
#endif
diff --git a/main.c b/main.c
@@ -589,7 +589,6 @@ main(int argc, char *argv[])
{
struct addrinfo hints;
struct sockaddr_storage clt, slt;
- struct linger lingerie;
socklen_t cltlen, sltlen;
int sock, dofork = 1, inetf = AF_UNSPEC, usechroot = 0,
nocgi = 0, errno_save, nbindips = 0, i, j,
@@ -1147,15 +1146,11 @@ read_selector_again:
tls_free(tlsclientctx);
}
+ lingersock(tlssocks[tlsclientreader? 0…
close(tlssocks[tlsclientreader? 0 : 1]…
if (tlsclientreader) {
- /*
- * Only one process needs
- * to do this.
- */
- waitforpendingbytes(sock);
- shutdown(sock, SHUT_RDWR);
+ lingersock(sock);
close(sock);
}
return 0;
@@ -1169,30 +1164,7 @@ read_selector_again:
clienth, clientp, serverh, serverp,
nocgi, istls);
- if (!istls) {
- /*
- * On close only wait for at maximum 60
- * seconds for all data to be transmitted
- * before forcefully closing the
- * connection.
- */
- lingerie.l_onoff = 1;
- lingerie.l_linger = 60;
- setsockopt(sock, SOL_SOCKET, SO_LINGER,
- &lingerie, sizeof(lingerie));
- /*
- * Force explict flush of buffers using
- * TCP_NODELAY.
- */
- j = 1;
- setsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
- &j, sizeof(int));
- waitforpendingbytes(sock);
- j = 0;
- setsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
- &j, sizeof(int));
- shutdown(sock, SHUT_RDWR);
- }
+ lingersock(sock);
close(sock);
if (loglvl & CONN) {
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.