Beispiel #1
0
inline static void
initClientFD(struct FdInfo *fd,
	     /*@in@*//*@observer@*/struct InterfaceInfo const *iface)
    /*@globals internalState, fileSystem@*/
    /*@modifies internalState, fileSystem, *fd@*/
{
  struct sockaddr_in	s;
  int const		ON = 1;

  assert(fd!=0 && iface!=0);
  
  fd->iface = iface;
  fd->fd    = Esocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

  Esetsockopt(fd->fd, SOL_IP,     IP_PKTINFO,      &ON, sizeof ON);
  Esetsockopt(fd->fd, SOL_SOCKET, SO_BROADCAST,    &ON, sizeof ON);
  Esetsockopt(fd->fd, SOL_SOCKET, SO_REUSEADDR,    &ON, sizeof ON);  
  Esetsockopt(fd->fd, SOL_SOCKET, SO_BINDTODEVICE, iface->name, strlen(iface->name)+1);

  memset(&s, 0, sizeof(s));
  
    /*@-type@*/
  s.sin_family      = AF_INET; /*@=type@*/
  s.sin_port        = htons(DHCP_PORT_SERVER);
  s.sin_addr.s_addr = htonl(INADDR_ANY);

  Ebind(fd->fd, &s);
}
static int
doit(char const *filename, struct timeval *timeout)
{
  int			fd;
  struct sockaddr_un	sock;
  pid_t			pid;
  fd_set		fdset;

  ENSC_INIT_UNIX_SOCK(sock, filename);

  fd = Esocket(PF_UNIX, SOCK_STREAM, 0);
  Ebind(fd, &sock, sizeof sock);
  Elisten(fd, 5);

  printXid(1);

  FD_ZERO(&fdset);
  FD_SET(fd, &fdset);

  pid = Efork();
  if (pid==0) {
    Eselect(fd+1, &fdset, 0,0, timeout);
    if (FD_ISSET(fd, &fdset)) handleMessage(fd);
    exit(1);
  }

  return EXIT_SUCCESS;
}
Beispiel #3
0
inline static void
initSenderFD(/*@out@*/int *fd)
    /*@globals internalState, fileSystem@*/
    /*@modifies internalState, fileSystem, *fd@*/
    /*@requires maxRead(fd)==0 /\ maxSet(fd)==0@*/
{
  struct sockaddr_in	s;

  assert(fd!=0);

  *fd = Esocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

  memset(&s, 0, sizeof(s));
  
    /*@-type@*/
  s.sin_family      = AF_INET; /*@=type@*/
  s.sin_port        = htons(DHCP_PORT_CLIENT);
  s.sin_addr.s_addr = htonl(INADDR_ANY);

  Ebind(*fd, &s);
}