帮忙看下socket的一段代码
代码如下:
int iSendLen=sizeof(IcmpHeader)+PACKET_SIZE;
char * pSendBuf=new char[iSendLen];
struct sockaddr_in socDest;
strIP="192.168.10.122";
socket sockRaw;
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,1),&wsaData) != 0)
{
fprintf(stderr,"WSAStartup failed: %d\n",GetLastError());
exit(1);
}
sockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,0);
if(INVALID_SOCKET==sockRaw)
{
printf("invalid socket!\n");
exit(1);
}
FillIcmpPackets((IcmpHeader*)pSendBuf,iSendLen);
socDest.sin_addr.s_addr=inet_addr(strIP);
socDest.sin_family=AF_INET;
int iSendNum;
if(SOCKET_ERROR==(iSendNum = sendto(sockRaw,pSendBuf,iSendLen,0, \
(sockaddr *)&socDest,sizeof(socDest))))
{
printf("sendto failed!\n");
closesocket(sockRaw);
exit(1);
}
printf("have sent to %s %d packets!\n",(char *)strIP,iSendNum);
fd_set fds;
FD_ZERO(&fds);
FD_SET(sockRaw,&fds);
timeval iTimeval={1,0};
int iResult=select(NULL,&fds,0,0,&iTimeval);
上面这段代码就是用sendto发送一个包,然后用select判断socket是否是可读的,进一步再接收。上面192.168.10.122肯定是可以ping通的但是select老是返回0,这是什么原因?