if((ErrorCode=WSAStartup(MAKEWORD(2,2),&wsaData))!=0){
    fprintf(stderr,"WSAStartup failed: %d\n",ErrorCode);
    ExitProcess(STATUS_FAILED);
  }  SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);
    if (SockRaw==INVALID_SOCKET){
    fprintf(stderr,"WSASocket() failed: %d\n",WSAGetLastError());
    ExitProcess(STATUS_FAILED);
  }//设置IP_HDRINCL以自己填充IP首部
  ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(char *)&flag,sizeof(int));      if (ErrorCode==SOCKET_ERROR) printf("Set IP_HDRINCL Error!\n");
......
......
iphdr->ip_verlen= (4<<4| (sizeof(struct ip)/4));
iphdr->ip_tos = 0;
iphdr->ip_len = htons(sizeof(struct ip) + sizeof(struct icmp)+1);
iphdr->ip_ttl = 0xff;
iphdr->ip_p = 1;         
iphdr->ip_id = htons(0x566);
iphdr->ip_off = htons(0x2000); //more fragment
iphdr->ip_off |= htons(0x1b76);
问题就在这 只要设置IP偏移量不为0 sendto 就会返回-1
如果设置偏移为0就没有问题
....
....
ErrorCode=sendto(SockRaw,SendBuf,datasize+1,0,(struct sockaddr*) &DestAddr,sizeof(DestAddr));错误类型10004运行测试平台  windows2000