From e1ddd9937759bc22b7241e48400d17840a101d9d Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Wed, 26 Apr 2000 13:26:11 +0000 Subject: 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. --- sysdep/unix/io.c | 13 +++++++++---- sysdep/unix/main.c | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index e50689f6..35af2df8 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -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; diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c index 39ac3521..621d85ca 100644 --- a/sysdep/unix/main.c +++ b/sysdep/unix/main.c @@ -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); } -- cgit v1.2.3