rem: unsigned int cli_sa_len = sizeof(struct sockaddr_in);
add: socklen_t cli_sa_len = sizeof(struct sockaddr_in);
context: void udp_forward(const struct ip_addr *listen_addr, const struct ip_addr *source, vector<int> *port_list, vector<host_map*> *map_list, int uid, int gid){  fd_set fds, tmp_fds;  int fd_set_len = sizeof(fd_set);  int maxfd = 0;  FD_ZERO(&fds);  iterator<vector<int>,int> it(*port_list);  for (it.start(); it.cont(); it.next()) {    int port = it.get();    int sd = udp_listen(listen_addr, port);    if (sd == -1) {      close_sockets(port_list);      return;    }    fdset(sd, &fds, &maxfd);  }  if (drop_privileges(uid, gid)) {    close_sockets(port_list);    return;  }  char buf[BUF_SZ];  struct sockaddr_in cli_sa;  unsigned int cli_sa_len = sizeof(struct sockaddr_in);  for (;;) { /* forever */    /*     * Restores tmp_fds from fds.     */    memcpy(&tmp_fds, &fds, fd_set_len);    /*     * Wait for data.     */    DEBUGFD(syslog(LOG_DEBUG, "UDP select(): %d FDs", maxfd));    int nd = select(maxfd, &tmp_fds, 0, 0, 0);    if (nd == -1) {      if (errno != EINTR)	syslog(LOG_ERR, "UDP select() failed: %m");      continue;    }    for (int fd = 0; nd; ++fd)      if (FD_ISSET(fd, &tmp_fds)) {	--nd;	int rd = recvfrom(fd, buf, BUF_SZ, 0, (struct sockaddr *) &cli_sa, &cli_sa_len);	if (rd == -1) {	  syslog(LOG_ERR, "Can't receive UDP packet: %m");	  continue;	}	/*	 * Get local address	 */	struct sockaddr_in local_cli_sa;	unsigned int local_cli_sa_len = sizeof(local_cli_sa);	if (getsockname(fd, (struct sockaddr *) &local_cli_sa, &local_cli_sa_len)) {	  syslog(LOG_ERR, "udp_forward(): Can't get local sockname: %m");	  memset(&local_cli_sa, 0, local_cli_sa_len);	}	do_udp_forward(source, &cli_sa, &local_cli_sa, map_list, buf, rd);      }  } /* main loop */}