chiark / gitweb /
Support for displaying statistics. Make client connections blocking, so
[tripe] / peer.c
diff --git a/peer.c b/peer.c
index 83123d1c41e0ff12ad784c957bd1b1d6fa04145f..937d29f2b3c66b4b034f3bb2c8334f9eba9e8c6a 100644 (file)
--- a/peer.c
+++ b/peer.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: peer.c,v 1.1 2001/02/03 20:26:37 mdw Exp $
+ * $Id: peer.c,v 1.3 2001/02/04 17:10:58 mdw Exp $
  *
  * Communication with the peer
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: peer.c,v $
+ * Revision 1.3  2001/02/04 17:10:58  mdw
+ * Make file descriptors be nonblocking and close-on-exec.
+ *
+ * Revision 1.2  2001/02/03 22:40:29  mdw
+ * Put timer information into the entropy pool when packets are received
+ * and on similar events.  Reseed the generator on the interval timer.
+ *
  * Revision 1.1  2001/02/03 20:26:37  mdw
  * Initial checkin.
  *
@@ -67,6 +74,7 @@ static void p_read(int fd, unsigned mode, void *v)
 
   /* --- Read the data --- */
 
+  TIMER;
   sz = sizeof(addr);
   n = recvfrom(fd, buf_i, sizeof(buf_i), 0, &a.sa, &sz);
   if (n < 0) {
@@ -77,11 +85,7 @@ static void p_read(int fd, unsigned mode, void *v)
   /* --- Find the appropriate peer --- */
 
   assert(a.sa.sa_family == AF_INET);
-  T( trace(T_PEER, "packet from %s:%u", 
-          inet_ntoa(a.sin.sin_addr), (unsigned)ntohs(a.sin.sin_port)); )
   for (p = peers; p; p = p->next) {
-    T( trace(T_PEER, "trying %s:%u", 
-            inet_ntoa(p->peer.sin.sin_addr), (unsigned)ntohs(p->peer.sin.sin_port)); )
     if (p->peer.sin.sin_addr.s_addr == a.sin.sin_addr.s_addr &&
        p->peer.sin.sin_port == a.sin.sin_port)
       goto found;
@@ -181,6 +185,7 @@ void p_txend(peer *p)
 void p_tun(peer *p, buf *b)
 {
   buf *bb = p_txstart(p, MSG_PACKET);
+  TIMER;
   if (ks_encrypt(&p->ks, b, bb))
     kx_start(&p->kx);
   if (BCUR(bb) > BBASE(bb))
@@ -250,6 +255,7 @@ void p_init(unsigned port)
   sin.sin_port = htons(port);
   if (bind(fd, (struct sockaddr *)&sin, sizeof(sin)))
     die(EXIT_FAILURE, "bind failed: %s", strerror(errno));
+  fdflags(fd, O_NONBLOCK, O_NONBLOCK, FD_CLOEXEC, FD_CLOEXEC);
   sel_initfile(&sel, &sock, fd, SEL_READ, p_read, 0);
   sel_addfile(&sock);
   T( trace(T_PEER, "peer: created socket"); )