windows下WSAIoctl 出现“10045”错误,代码已贴出,麻烦不吝赐教
WSADATA wsData;/* 启动2.2版本的Socket,并将Socket版本信息保存到wsData中 */ WSAStartup(MAKEWORD(2,2),&wsData);//2.2 m_socket = socket(AF_INET,SOCK_RAW,IPPROTO_IP);//IPPROTO_IP int timeout = 1000; //超时1秒 //设置接收数据的超时时间 if (SOCKET_ERROR==setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout))) { AfxMessageBox("接收超时"); return FALSE; } // BOOL flag=TRUE;/* 设置IP头操作选项 */ // setsockopt(m_socket,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag)); char hostName[128];/* 获取本地主机名 */ // CString hostName; memset(hostName,0,128); hostent * pHostIP;/* 根据主机名获取主机信息 */ pHostIP=gethostbyname(hostName); /* 封装IP地址信息 */ sockaddr_in addr_in; addr_in.sin_addr=*(in_addr*)pHostIP->h_addr_list[0]; addr_in.sin_family=AF_INET; addr_in.sin_port=htons(6000); if (SOCKET_ERROR==bind(m_socket,(SOCKADDR*)&addr_in,sizeof(addr_in))) { AfxMessageBox("绑定失败!"); return FALSE; } #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) DWORD dwBufferLen[10]; DWORD dwBufferInLen=1; DWORD dwBytesReturned=0; if (INVALID_SOCKET==WSAIoctl(m_socket,SIO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen), &dwBytesReturned,NULL,NULL)) { CString str; str.Format("%d",WSAGetLastError());//WSAEOPNOTSUPP 指定的ioctl命令无法实现 AfxMessageBox(str); AfxMessageBox("设置缓冲区错误!"); closesocket(m_socket); return FALSE; } return TRUE;