Не получается наначать работу с RAW socket. После установки свойств сокета функцией WSAIoctl возвращается ошибка 10022.(Типа не правельны какие-то параметры.)
void RecvPacket()
{
SOCKET sock;
WSADATA wsd;
char RecvBuf[65535] = {0};
DWORD dwBytesRet;
unsigned int optval = 1;
WSAStartup(MAKEWORD(2,1),&wsd);
sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
char FAR name[MAX_HOSTNAME_LAN];
gethostname(name, MAX_HOSTNAME_LAN);
struct hostent FAR * pHostent;
pHostent = (struct hostent * )malloc(sizeof(struct hostent));
pHostent = gethostbyname(name);
SOCKADDR_IN sa;
sa.sin_family = AF_INET;
sa.sin_port = htons(600);
memcpy(&sa.sin_addr.S_un.S_addr, pHostent->h_addr_list[0], pHostent->h_length);
int err=bind(sock, (SOCKADDR *)&sa, sizeof(sa));
if(err==0){MessageBox(0,"Bind OK","",0);};
ZeroMemory(&dwBytesRet,sizeof(dwBytesRet));
err=WSAIoctl(sock,SIO_RCVALL,&optval,sizeof(optval),NULL,NULL,&dwBytesRet, NULL, NULL);
if(err==0){MessageBox(0,"","",0);};
err=WSAGetLastError();
while (1)
{
memset(RecvBuf, 0, sizeof(RecvBuf));
recv(sock, RecvBuf, sizeof(RecvBuf), 0);
}
|