summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>2000-04-26 15:26:11 +0200
committerMartin Mares <mj@ucw.cz>2000-04-26 15:26:11 +0200
commite1ddd9937759bc22b7241e48400d17840a101d9d (patch)
tree1d44afc5454a04e954613e7853edf38eade5c607
parentdfa9a53a66e5747ddbeedfa0a47fa2ca9fc93b99 (diff)
downloadbird-e1ddd9937759bc22b7241e48400d17840a101d9d.tar
bird-e1ddd9937759bc22b7241e48400d17840a101d9d.zip
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.
-rw-r--r--sysdep/unix/io.c13
-rw-r--r--sysdep/unix/main.c2
2 files changed, 10 insertions, 5 deletions
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c
index e50689f..35af2df 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 39ac352..621d85c 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);
}