int GetNextPkt(SOCKET UDPSock, struct PACKET *pkt, int
WaitSec, int WaitMilSec)
{
struct
sockaddr_in from;
int sl =
sizeof(from);
fd_set
readFd;
timeval
SelectTime;
SelectTime.tv_sec
= WaitSec;
SelectTime.tv_usec=WaitMilSec;
FD_ZERO(&readFd);
FD_SET(UDPSock,&readFd);
int ret =
select(255,&readFd,NULL,NULL,&SelectTime);
if
(FD_ISSET(UDPSock, &readFd)==1)
{
ret
= recvfrom(UDPSock, (char *)pkt, sizeof(struct PACKET), 0 ,(struct sockaddr
*)&from,(socklen_t*)&sl);
if
(ret>0)
{
strcpy(pkt->IPsVisited[pkt->NumHops],MYIP);
pkt->PortsVisited[pkt->NumHops]=UDPPort;
(pkt->NumHops)++;
ShowPkt(pkt,&from);
return
ret;
}
}
return -1;
}