Introduction
Introduction Statistics Contact Development Disclaimer Help
Simplify socket binding - geomyidae - A small C-based gopherd.
git clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfri…
Log
Files
Refs
Tags
README
LICENSE
---
commit 87e1fba0998bc690d6ebb33ca8b4087a5d97af1a
parent a86a1cbb6590aed14e144d5abde60205654324d8
Author: Quentin Rameau <[email protected]>
Date: Thu, 30 Aug 2018 21:17:33 +0200
Simplify socket binding
Signed-off-by: Christoph Lohmann <[email protected]>
Diffstat:
M main.c | 32 +++++++++++------------------…
1 file changed, 11 insertions(+), 21 deletions(-)
---
diff --git a/main.c b/main.c
@@ -361,7 +361,7 @@ main(int argc, char *argv[])
struct addrinfo hints;
struct sockaddr_storage clt;
socklen_t cltlen;
- int sock, dofork, v4, v6, usechroot, nocgi;
+ int sock, dofork, inetf, usechroot, nocgi;
char *port, *base, clienth[NI_MAXHOST], clientp[NI_MAXSERV];
char *user, *group, *bindip, *ohost, *sport;
struct passwd *us;
@@ -377,17 +377,16 @@ main(int argc, char *argv[])
bindip = NULL;
ohost = NULL;
sport = NULL;
- v4 = 1;
- v6 = 1;
+ inetf = AF_INET6;
usechroot = 0;
nocgi = 0;
ARGBEGIN {
case '4':
- v6 = 0;
+ inetf = AF_INET;
break;
case '6':
- v4 = 0;
+ inetf = AF_INET6;
break;
case 'b':
base = EARGF(usage());
@@ -485,31 +484,22 @@ main(int argc, char *argv[])
}
memset(&hints, 0, sizeof(hints));
+ hints.ai_family = inetf;
hints.ai_flags = AI_PASSIVE;
hints.ai_socktype = SOCK_STREAM;
if (bindip)
hints.ai_flags |= AI_CANONNAME;
- listfd = -1;
- if (v6) {
- hints.ai_family = PF_INET6;
- listfd = getlistenfd(&hints, bindip, port);
- if (!v4 && listfd < 0) {
- perror("getlistenfd6");
- return 1;
- }
- }
- if (v4 && listfd < 0) {
- hints.ai_family = PF_INET;
- listfd = getlistenfd(&hints, bindip, port);
- if (listfd < 0) {
- perror("getlistenfd4");
- return 1;
+ if ((listfd = getlistenfd(&hints, bindip, port)) < 0) {
+ if (inetf == AF_UNSPEC) {
+ hints.ai_family = AF_INET;
+ listfd = getlistenfd(&hints, bindip, port);
}
}
if (listfd < 0) {
- fprintf(stderr, "Unable to got a binding socket. "
+ fprintf(stderr, "Unable to get a binding socket. "
"Look at bindip and the tcp port.\n");
+ perror("getlistenfd");
return 1;
}
You are viewing proxied material from bitreich.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.