/* -*-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.
*
/* --- Read the data --- */
+ TIMER;
sz = sizeof(addr);
n = recvfrom(fd, buf_i, sizeof(buf_i), 0, &a.sa, &sz);
if (n < 0) {
/* --- 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;
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))
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"); )