From: fredrik Date: Wed, 19 Oct 2005 01:24:01 +0000 (+0000) Subject: Allow setting SO_REUSEADDR. X-Git-Tag: 0.1~190 X-Git-Url: http://dolda2000.com/gitweb/?p=doldaconnect.git;a=commitdiff_plain;h=347d6d76f535256863bcf8a13b3b06a859bf27d2 Allow setting SO_REUSEADDR. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@385 959494ce-11ee-0310-bf91-de5d638817bd --- diff --git a/daemon/net.c b/daemon/net.c index f16441f..1eeaff1 100644 --- a/daemon/net.c +++ b/daemon/net.c @@ -51,6 +51,7 @@ static struct configvar myvars[] = { /* 0 = Direct mode, 1 = Passive mode, 2 = SOCKS proxy */ {CONF_VAR_INT, "mode", {.num = 0}}, + {CONF_VAR_BOOL, "reuseaddr", {.num = 0}}, /* Only for direct mode */ {CONF_VAR_IPV4, "visibleipv4", {.ipv4 = {0}}}, {CONF_VAR_STRING, "publicif", {.str = L""}}, @@ -521,6 +522,7 @@ size_t sockqueuesize(struct socket *sk) struct socket *netcslisten(int type, struct sockaddr *name, socklen_t namelen, void (*func)(struct socket *, struct socket *, void *), void *data) { struct socket *sk; + int intbuf; if(confgetint("net", "mode") == 1) { @@ -538,6 +540,11 @@ struct socket *netcslisten(int type, struct sockaddr *name, socklen_t namelen, v if((sk = mksock(name->sa_family, type)) == NULL) return(NULL); sk->state = SOCK_LST; + if(confgetint("net", "reuseaddr")) + { + intbuf = 1; + setsockopt(sk->fd, SOL_SOCKET, SO_REUSEADDR, &intbuf, sizeof(intbuf)); + } if(bind(sk->fd, name, namelen) < 0) { putsock(sk);