Commit e1ddd993 authored by Martin Mareš's avatar Martin Mareš

Changed handling of incoming connections, so that we can send data

from the send hook without worrying about existence of socket buffers.

Also, don't forget to copy peer addresses.
parent dfa9a53a
......@@ -493,15 +493,21 @@ sk_passive_connected(sock *s, struct sockaddr *sa, int al, int type)
char *err;
t->type = type;
t->fd = fd;
t->ttl = s->ttl;
t->tos = s->tos;
t->rbsize = s->rbsize;
t->tbsize = s->tbsize;
if (type == SK_TCP)
get_sockaddr((sockaddr *) sa, &t->daddr, &t->dport);
add_tail(&sock_list, &t->n);
s->rx_hook(t, 0);
if (err = sk_setup(t))
{
log(L_ERR "Incoming connection: %s: %m", err);
s->err_hook(s, errno);
return 0;
rfree(t);
return 1;
}
sk_alloc_bufs(t);
s->rx_hook(t, 0);
return 1;
}
else if (errno != EINTR && errno != EAGAIN)
......@@ -682,7 +688,6 @@ sk_open_unix(sock *s, char *name)
ERR("bind");
if (listen(fd, 8))
ERR("listen");
sk_alloc_bufs(s);
add_tail(&sock_list, &s->n);
return 0;
......
......@@ -249,7 +249,6 @@ cli_connect(sock *s, int size)
s->rx_hook = cli_rx;
s->tx_hook = cli_tx;
s->err_hook = cli_err;
s->rbsize = 1024;
s->data = c = cli_new(s);
s->pool = c->pool; /* We need to have all the socket buffers allocated in the cli pool */
c->rx_pos = c->rx_buf;
......@@ -266,6 +265,7 @@ cli_init_unix(void)
s = cli_sk = sk_new(cli_pool);
s->type = SK_UNIX_PASSIVE;
s->rx_hook = cli_connect;
s->rbsize = 1024;
if (sk_open_unix(s, path_control_socket) < 0)
die("Unable to create control socket %s", path_control_socket);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment