summaryrefslogtreecommitdiffstats
path: root/src/tcp.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2009-09-23 15:18:30 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2009-09-23 15:18:30 +0200
commitda1160ad2c6e05c9e5594e17e5e35cbb461871e4 (patch)
tree42de1391d675a40ecf395e5fa2da3334aaba2c57 /src/tcp.c
parentfc61453d3f30b440e04bb6b3781e1e2348c85cfb (diff)
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>
Diffstat (limited to 'src/tcp.c')
-rw-r--r--src/tcp.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/tcp.c b/src/tcp.c
index 2b7ca19..ce2cd6f 100644
--- a/src/tcp.c
+++ b/src/tcp.c
@@ -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 {