iTo self: reuseaddr before bind. - 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 94382cb7360ec1e712df59e883381cee1344dd9a /scm/geomyidae/commit/94382cb7360ec1e712df59e883381cee1344dd9a.gph bitreich.org 70 1parent d81d0fda6b372f9bd057b5c17e50079509875d94 /scm/geomyidae/commit/d81d0fda6b372f9bd057b5c17e50079509875d94.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Sun, 24 Apr 2011 15:14:25 +0200 Err bitreich.org 70 i Err bitreich.org 70 iTo self: reuseaddr before bind. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M main.c | 7 ++++++- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 6 insertions(+), 1 deletion(-) 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@@ -254,7 +254,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i struct addrinfo hints, *ai, *rp; Err bitreich.org 70 i struct sockaddr_storage clt; Err bitreich.org 70 i socklen_t cltlen; Err bitreich.org 70 i- int sock, dofork; Err bitreich.org 70 i+ int sock, dofork, on; Err bitreich.org 70 i char *port, *base, clienth[NI_MAXHOST], clientp[NI_MAXSERV]; Err bitreich.org 70 i char *user, *group, *bindip, *ohost, *sport; Err bitreich.org 70 i struct passwd *us; Err bitreich.org 70 i@@ -355,11 +355,16 @@ main(int argc, char *argv[]) Err bitreich.org 70 i return 1; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+ on = 1; Err bitreich.org 70 i for(rp = ai; rp != nil; rp = rp->ai_next) { Err bitreich.org 70 i listfd = socket(rp->ai_family, rp->ai_socktype, Err bitreich.org 70 i rp->ai_protocol); Err bitreich.org 70 i if(listfd < 0) Err bitreich.org 70 i continue; Err bitreich.org 70 i+ if(setsockopt(listfd, SOL_SOCKET, SO_REUSEADDR, &on, Err bitreich.org 70 i+ sizeof(on)) < 0) { Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i if(bind(listfd, rp->ai_addr, rp->ai_addrlen) == 0) Err bitreich.org 70 i break; Err bitreich.org 70 i close(listfd); Err bitreich.org 70 .