diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2009-09-23 15:18:30 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2009-09-23 15:18:30 +0200 |
commit | da1160ad2c6e05c9e5594e17e5e35cbb461871e4 (patch) | |
tree | 42de1391d675a40ecf395e5fa2da3334aaba2c57 | |
parent | fc61453d3f30b440e04bb6b3781e1e2348c85cfb (diff) | |
download | conntrack-tools-da1160ad2c6e05c9e5594e17e5e35cbb461871e4.tar.gz conntrack-tools-da1160ad2c6e05c9e5594e17e5e35cbb461871e4.zip |
conntrackd: fix re-connect with multiple TCP channels
This patch fixes a bug in the TCP support that breaks
re-connections of the client side if several TCP
channels are used in the configuration file.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | include/tcp.h | 1 | ||||
-rw-r--r-- | src/tcp.c | 10 |
2 files changed, 6 insertions, 5 deletions
diff --git a/include/tcp.h b/include/tcp.h index 1b1d391..2f0fd0a 100644 --- a/include/tcp.h +++ b/include/tcp.h @@ -49,6 +49,7 @@ struct tcp_sock { } addr; socklen_t sockaddr_len; struct tcp_stats stats; + struct tcp_conf *conf; }; struct tcp_sock *tcp_server_create(struct tcp_conf *conf); @@ -35,6 +35,8 @@ struct tcp_sock *tcp_server_create(struct tcp_conf *c) if (m == NULL) return NULL; + m->conf = c; + switch(c->ipproto) { case AF_INET: m->addr.ipv4.sin_family = AF_INET; @@ -222,18 +224,16 @@ tcp_client_init(struct tcp_sock *m, struct tcp_conf *c) return 0; } -static struct tcp_conf *tcp_client_conf; /* XXX: need this to re-connect. */ - struct tcp_sock *tcp_client_create(struct tcp_conf *c) { struct tcp_sock *m; - tcp_client_conf = c; - m = calloc(sizeof(struct tcp_sock), 1); if (m == NULL) return NULL; + m->conf = c; + if (tcp_client_init(m, c) == -1) { free(m); return NULL; @@ -318,7 +318,7 @@ ssize_t tcp_send(struct tcp_sock *m, const void *data, int size) if (ret == -1) { if (errno == EPIPE || errno == ECONNRESET) { close(m->fd); - tcp_client_init(m, tcp_client_conf); + tcp_client_init(m, m->conf); m->state = TCP_CLIENT_DISCONNECTED; m->stats.error++; } else { |