Exemple #1
0
static void recv4() {
  int len;
  int interface;

  mh.msg_name=&sa4;
  mh.msg_namelen=sizeof(sa4);
  if ((len=recvmsg(s4,&mh,0))==-1) {
    perror("recvmsg");
    exit(3);
  }
  peer=(struct sockaddr*)&sa4;
  sl=sizeof(sa4);

  interface=v4if();
  getip(interface);

  handle(s4,buf,len,interface);
}
static void recv4(int s) {
  int len;

  mh.msg_name=&sa4;
  mh.msg_namelen=sizeof(sa4);
  if ((len=recvmsg(s,&mh,0))==-1) {
    perror("recvmsg");
    exit(3);
  }
  peer=(struct sockaddr*)&sa4;
  sl=sizeof(sa4);

#ifdef DEBUG
  printf("v4: ");
#endif

  handle(s,buf,len,v4if(),s==ls4);
}
static void recv6(int s) {
  int len,interface;
#ifdef DEBUG
  char addrbuf[INET6_ADDRSTRLEN];
  char ifbuf[IFNAMSIZ];
#endif

  mh.msg_name=&sa6;
  mh.msg_namelen=sizeof(sa6);

#if 0
  mh.msg_control=abuf;
  mh.msg_controllen=sizeof(abuf);
#endif

  if ((len=recvmsg(s,&mh,0))==-1) {
    perror("recvmsg");
    exit(3);
  }
  peer=(struct sockaddr*)&sa6;
  sl=sizeof(sa6);

  if (IN6_IS_ADDR_V4MAPPED(sa6.sin6_addr.s6_addr32)) {
    interface=v4if();
#ifdef DEBUG
    inet_ntop(AF_INET,(char*)(sa6.sin6_addr.s6_addr)+12,addrbuf,sizeof addrbuf);
    if_indextoname(interface,ifbuf);
    printf("v4: %s: ",ifbuf);
#endif
  } else {
    interface=sa6.sin6_scope_id;
#ifdef DEBUG
    inet_ntop(AF_INET6,sa6.sin6_addr.s6_addr,addrbuf,sizeof addrbuf);
    if_indextoname(interface,ifbuf);
    printf("v6: %s: ",ifbuf);
#endif
  }

  handle(s,buf,len,interface,s==ls6);
#ifdef DEBUG
  printf(" from %s\n",addrbuf);
#endif
}
Exemple #4
0
static void recv6() {
  int len,interface;

  mh.msg_name=&sa6;
  mh.msg_namelen=sizeof(sa6);
  if ((len=recvmsg(s6,&mh,0))==-1) {
    perror("recvmsg");
    exit(3);
  }
  peer=(struct sockaddr*)&sa6;
  sl=sizeof(sa6);

  if (IN6_IS_ADDR_V4MAPPED(sa6.sin6_addr.s6_addr))
    interface=v4if();
  else
    interface=sa6.sin6_scope_id;

  getip(interface);

  handle(s6,buf,len,interface);
}