summaryrefslogtreecommitdiffstats
path: root/sysdep/unix
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 /sysdep/unix
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.
Diffstat (limited to 'sysdep/unix')
-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);
}