diff options
author | Martin Mares <mj@ucw.cz> | 2000-04-26 15:26:11 +0200 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 2000-04-26 15:26:11 +0200 |
commit | e1ddd9937759bc22b7241e48400d17840a101d9d (patch) | |
tree | 1d44afc5454a04e954613e7853edf38eade5c607 | |
parent | dfa9a53a66e5747ddbeedfa0a47fa2ca9fc93b99 (diff) | |
download | bird-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.c | 13 | ||||
-rw-r--r-- | 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 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); } |