]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Changed handling of incoming connections, so that we can send data
authorMartin Mares <mj@ucw.cz>
Wed, 26 Apr 2000 13:26:11 +0000 (13:26 +0000)
committerMartin Mares <mj@ucw.cz>
Wed, 26 Apr 2000 13:26:11 +0000 (13:26 +0000)
from the send hook without worrying about existence of socket buffers.

Also, don't forget to copy peer addresses.

sysdep/unix/io.c
sysdep/unix/main.c

index e50689f62a3b59059f64369a13e557d98e741f1b..35af2df8bfcb7a29d197a6b797faed68ba5726be 100644 (file)
@@ -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;
 
index 39ac3521b96f42f67bfd6ebdd056561c659e044a..621d85ca4613b61a619c40e0d872111abea51eb8 100644 (file)
@@ -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);
 }