Introduction
Introduction Statistics Contact Development Disclaimer Help
Use sockets instead of pipes to allow bidirectional communication. - geomyidae …
git clone git://git.codemadness.org/geomyidae
Log
Files
Refs
README
LICENSE
---
commit 3a9cbc78b4777d2dab54bca974f65c708ffc61a5
parent 5359e24388be689acc073af1739af4c932a57915
Author: Christoph Lohmann <[email protected]>
Date: Fri, 26 May 2023 06:28:28 +0200
Use sockets instead of pipes to allow bidirectional communication.
* In CGI it was already possible to completely speak two way with the
client.
* In DCGI this allows the same behaviour as in CGI.
* For TLS this is a preparation for TLS support too.
Diffstat:
M handlr.c | 14 +++++++-------
M main.c | 16 ++++++++--------
2 files changed, 15 insertions(+), 15 deletions(-)
---
diff --git a/handlr.c b/handlr.c
@@ -192,10 +192,10 @@ handledcgi(int sock, char *file, char *port, char *base, …
char *p, *path, *ln = NULL;
size_t linesiz = 0;
ssize_t n;
- int outpipe[2], ret = 0;
+ int outsocks[2], ret = 0;
Elems *el;
- if (pipe(outpipe) < 0)
+ if (socketpair(AF_LOCAL, SOCK_STREAM, 0, outsocks) < 0)
return;
path = xstrdup(file);
@@ -218,8 +218,8 @@ handledcgi(int sock, char *file, char *port, char *base, ch…
while (dup2(sock, 2) < 0 && errno == EINTR);
switch (fork()) {
case 0:
- while (dup2(outpipe[1], 1) < 0 && errno == EINTR);
- close(outpipe[0]);
+ while (dup2(outsocks[1], 1) < 0 && errno == EINTR);
+ close(outsocks[0]);
if (path != NULL) {
if (chdir(path) < 0)
break;
@@ -239,11 +239,11 @@ handledcgi(int sock, char *file, char *port, char *base, …
break;
default:
while (dup2(sock, 1) < 0 && errno == EINTR);
- close(outpipe[1]);
+ close(outsocks[1]);
- if (!(fp = fdopen(outpipe[0], "r"))) {
+ if (!(fp = fdopen(outsocks[0], "r"))) {
perror("fdopen");
- close(outpipe[0]);
+ close(outsocks[0]);
break;
}
diff --git a/main.c b/main.c
@@ -551,7 +551,7 @@ main(int argc, char *argv[])
nlfdret, *lfdret, listfd, maxlfd, istls = 0,
dotls = 0, dohaproxy = 0, tcpver = -1, haret = 0,
#ifdef ENABLE_TLS
- tlspipe[2], shufbuf[1025],
+ tlssocks[2], shufbuf[1025],
shuflen, wlen, shufpos,
#endif /* ENABLE_TLS */
maxrecv, retl,
@@ -1035,23 +1035,23 @@ read_selector_again:
#ifdef ENABLE_TLS
if (istls) {
- if (pipe(tlspipe) < 0) {
- perror("tls_pipe");
+ if (socketpair(AF_LOCAL, SOCK_STREAM, 0, tlsso…
+ perror("tls_socketpair");
return 1;
}
switch(fork()) {
case 0:
- sock = tlspipe[1];
- close(tlspipe[0]);
+ sock = tlssocks[1];
+ close(tlssocks[0]);
break;
case -1:
perror("fork");
return 1;
default:
- close(tlspipe[1]);
+ close(tlssocks[1]);
do {
- shuflen = read(tlspipe[0], shu…
+ shuflen = read(tlssocks[0], sh…
if (shuflen == -1 && errno == …
continue;
for (shufpos = 0; shufpos < sh…
@@ -1065,7 +1065,7 @@ read_selector_again:
tls_close(tlsclientctx);
tls_free(tlsclientctx);
- close(tlspipe[0]);
+ close(tlssocks[0]);
waitforpendingbytes(sock);
shutdown(sock, SHUT_RDWR);
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.