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 }
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); }