我写了个程序,但每到接受包时就陷入死循环,代码如下:
WSADATA WSAData;
char    LocalName[128];
    struct  hostent *pHost;
BOOL    flag    = true;
    int     nTimeout = 1000;
//检查 Winsock 版本号
    if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
        AfxMessageBox("WSAStartup error!");    //初始化 Raw Socket
    if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) == INVALID_SOCKET)
        AfxMessageBox("socket setup error!");    //设置IP头操作选项
    if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag)) == SOCKET_ERROR)
        AfxMessageBox("setsockopt IP_HDRINCL error!");    //获取本机名
    if (gethostname((char*)LocalName, sizeof(LocalName)-1) == SOCKET_ERROR)
        AfxMessageBox("gethostname error!");    //获取本地 IP 地址
    if ((pHost = gethostbyname((char*)LocalName)) == NULL)
        AfxMessageBox("gethostbyname error!");    addr_in.sin_addr    = *(in_addr *)pHost->h_addr_list[0]; //IP
    addr_in.sin_family  = AF_INET;
    addr_in.sin_port    = htons(2004);    //把 sock 绑定到本地地址上
    if (bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in)) == SOCKET_ERROR)
        AfxMessageBox("bind error!");
                   dwValue = 1;


        //设置SOCK_RAW为SIO_RCVALL,以便接收所有的IP包
        if (ioctlsocket(sock, SIO_RCVALL, &dwValue) != 0)
            AfxMessageBox("ioctlsocket SIO_RCVALL error!");         recv(sock, RecvBuf, 65535, 0);//运行到这儿,便没有响应了
         其中//char        RecvBuf[65535];