diff options
Diffstat (limited to 'sysdep/unix/io.c')
-rw-r--r-- | sysdep/unix/io.c | 13 |
1 files changed, 9 insertions, 4 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; |