SMOLNET PORTAL home about changes
iUse sockets instead of pipes to allow bidirectional communication. - geomyidae - A small C-based gopherd.	Err	bitreich.org	70
hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/	URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/	bitreich.org	70
1Log	/scm/geomyidae/log.gph	bitreich.org	70
1Files	/scm/geomyidae/files.gph	bitreich.org	70
1Refs	/scm/geomyidae/refs.gph	bitreich.org	70
1Tags	/scm/geomyidae/tag	bitreich.org	70
1README	/scm/geomyidae/file/README.gph	bitreich.org	70
1LICENSE	/scm/geomyidae/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit 3a9cbc78b4777d2dab54bca974f65c708ffc61a5	/scm/geomyidae/commit/3a9cbc78b4777d2dab54bca974f65c708ffc61a5.gph	bitreich.org	70
1parent 5359e24388be689acc073af1739af4c932a57915	/scm/geomyidae/commit/5359e24388be689acc073af1739af4c932a57915.gph	bitreich.org	70
hAuthor: Christoph Lohmann <20h@r-36.net>	URL:mailto:20h@r-36.net	bitreich.org	70
iDate:   Fri, 26 May 2023 06:28:28 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iUse sockets instead of pipes to allow bidirectional communication.	Err	bitreich.org	70
i	Err	bitreich.org	70
i* In CGI it was already possible to completely speak two way with the	Err	bitreich.org	70
i  client.	Err	bitreich.org	70
i* In DCGI this allows the same behaviour as in CGI.	Err	bitreich.org	70
i* For TLS this is a preparation for TLS support too.	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M handlr.c                            |      14 +++++++-------	Err	bitreich.org	70
i  M main.c                              |      16 ++++++++--------	Err	bitreich.org	70
i	Err	bitreich.org	70
i2 files changed, 15 insertions(+), 15 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/handlr.c b/handlr.c	/scm/geomyidae/file/handlr.c.gph	bitreich.org	70
i@@ -192,10 +192,10 @@ handledcgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i         char *p, *path, *ln = NULL;	Err	bitreich.org	70
i         size_t linesiz = 0;	Err	bitreich.org	70
i         ssize_t n;	Err	bitreich.org	70
i-        int outpipe[2], ret = 0;	Err	bitreich.org	70
i+        int outsocks[2], ret = 0;	Err	bitreich.org	70
i         Elems *el;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        if (pipe(outpipe) < 0)	Err	bitreich.org	70
i+        if (socketpair(AF_LOCAL, SOCK_STREAM, 0, outsocks) < 0)	Err	bitreich.org	70
i                 return;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         path = xstrdup(file);	Err	bitreich.org	70
i@@ -218,8 +218,8 @@ handledcgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i         while (dup2(sock, 2) < 0 && errno == EINTR);	Err	bitreich.org	70
i         switch (fork()) {	Err	bitreich.org	70
i         case 0:	Err	bitreich.org	70
i-                while (dup2(outpipe[1], 1) < 0 && errno == EINTR);	Err	bitreich.org	70
i-                close(outpipe[0]);	Err	bitreich.org	70
i+                while (dup2(outsocks[1], 1) < 0 && errno == EINTR);	Err	bitreich.org	70
i+                close(outsocks[0]);	Err	bitreich.org	70
i                 if (path != NULL) {	Err	bitreich.org	70
i                         if (chdir(path) < 0)	Err	bitreich.org	70
i                                 break;	Err	bitreich.org	70
i@@ -239,11 +239,11 @@ handledcgi(int sock, char *file, char *port, char *base, char *args,	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
i         default:	Err	bitreich.org	70
i                 while (dup2(sock, 1) < 0 && errno == EINTR);	Err	bitreich.org	70
i-                close(outpipe[1]);	Err	bitreich.org	70
i+                close(outsocks[1]);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-                if (!(fp = fdopen(outpipe[0], "r"))) {	Err	bitreich.org	70
i+                if (!(fp = fdopen(outsocks[0], "r"))) {	Err	bitreich.org	70
i                         perror("fdopen");	Err	bitreich.org	70
i-                        close(outpipe[0]);	Err	bitreich.org	70
i+                        close(outsocks[0]);	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i 	Err	bitreich.org	70
1diff --git a/main.c b/main.c	/scm/geomyidae/file/main.c.gph	bitreich.org	70
i@@ -551,7 +551,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i             nlfdret, *lfdret, listfd, maxlfd, istls = 0,	Err	bitreich.org	70
i             dotls = 0, dohaproxy = 0, tcpver = -1, haret = 0,	Err	bitreich.org	70
i #ifdef ENABLE_TLS	Err	bitreich.org	70
i-            tlspipe[2], shufbuf[1025],	Err	bitreich.org	70
i+            tlssocks[2], shufbuf[1025],	Err	bitreich.org	70
i             shuflen, wlen, shufpos,	Err	bitreich.org	70
i #endif /* ENABLE_TLS */	Err	bitreich.org	70
i             maxrecv, retl,	Err	bitreich.org	70
i@@ -1035,23 +1035,23 @@ read_selector_again:	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #ifdef ENABLE_TLS	Err	bitreich.org	70
i                         if (istls) {	Err	bitreich.org	70
i-                                if (pipe(tlspipe) < 0) {	Err	bitreich.org	70
i-                                        perror("tls_pipe");	Err	bitreich.org	70
i+                                if (socketpair(AF_LOCAL, SOCK_STREAM, 0, tlssocks) < 0) {	Err	bitreich.org	70
i+                                        perror("tls_socketpair");	Err	bitreich.org	70
i                                         return 1;	Err	bitreich.org	70
i                                 }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                                 switch(fork()) {	Err	bitreich.org	70
i                                 case 0:	Err	bitreich.org	70
i-                                        sock = tlspipe[1];	Err	bitreich.org	70
i-                                        close(tlspipe[0]);	Err	bitreich.org	70
i+                                        sock = tlssocks[1];	Err	bitreich.org	70
i+                                        close(tlssocks[0]);	Err	bitreich.org	70
i                                         break;	Err	bitreich.org	70
i                                 case -1:	Err	bitreich.org	70
i                                         perror("fork");	Err	bitreich.org	70
i                                         return 1;	Err	bitreich.org	70
i                                 default:	Err	bitreich.org	70
i-                                        close(tlspipe[1]);	Err	bitreich.org	70
i+                                        close(tlssocks[1]);	Err	bitreich.org	70
i                                         do {	Err	bitreich.org	70
i-                                                shuflen = read(tlspipe[0], shufbuf, sizeof(shufbuf)-1);	Err	bitreich.org	70
i+                                                shuflen = read(tlssocks[0], shufbuf, sizeof(shufbuf)-1);	Err	bitreich.org	70
i                                                 if (shuflen == -1 && errno == EINTR)	Err	bitreich.org	70
i                                                         continue;	Err	bitreich.org	70
i                                                 for (shufpos = 0; shufpos < shuflen; shufpos += wlen) {	Err	bitreich.org	70
i@@ -1065,7 +1065,7 @@ read_selector_again:	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                                         tls_close(tlsclientctx);	Err	bitreich.org	70
i                                         tls_free(tlsclientctx);	Err	bitreich.org	70
i-                                        close(tlspipe[0]);	Err	bitreich.org	70
i+                                        close(tlssocks[0]);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                                         waitforpendingbytes(sock);	Err	bitreich.org	70
i                                         shutdown(sock, SHUT_RDWR);	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/geomyidae/commit/3a9cbc78b477...
Content-Typetext/plain; charset=utf-8