Dolda2000 GitWeb
/
doldaconnect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix reuseaddr in netcslistenlocal, too.
[doldaconnect.git]
/
daemon
/
net.c
diff --git
a/daemon/net.c
b/daemon/net.c
index
f16441f
..
300b46b
100644
(file)
--- 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}},
{
/* 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""}},
/* 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;
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)
{
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((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);
if(bind(sk->fd, name, namelen) < 0)
{
putsock(sk);
@@
-577,6
+584,11
@@
struct socket *netcslistenlocal(int type, struct sockaddr *name, socklen_t namel
if((sk = mksock(name->sa_family, type)) == NULL)
return(NULL);
sk->state = SOCK_LST;
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);
if(bind(sk->fd, name, namelen) < 0)
{
putsock(sk);