int _tmain(int argc, _TCHAR*
argv[]) { try
{ WSADATA wsaData; WSAStartup(MAKEWORD(
2,2),&
wsaData); SOCKET s; s=
socket(AF_INET,SOCK_RAW,IPPROTO_IP); char name[256
]; gethostname(name,sizeof
(name)); hostent* host=
gethostbyname(name); sockaddr_in localAddr; memset(&localAddr,0,sizeof
(localAddr)); localAddr.sin_family=
AF_INET; localAddr.sin_port=0
; localAddr.sin_addr=*(in_addr*)host->h_addr_list[0
]; if(SOCKET_ERROR==::bind(s,(sockaddr*)&localAddr,sizeof
(localAddr))) { throwLastError(); } DWORD returned=true
; if(SOCKET_ERROR==ioctlsocket(s,SIO_RCVALL,&
returned)) { throwLastError(); } bool flag = true
; setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char*) &flag, sizeof
(flag)); char buf[65536
]; ProcessPacket pp; thread_group tg; tg.create_thread(boost::bind(&ProcessPacket::process,&
pp)); tg.create_thread(boost::bind(&ProcessPacket::process,&
pp)); tg.create_thread(boost::bind(&ProcessPacket::processReady,&
pp)); tg.create_thread(boost::bind(&ProcessPacket::process,&
pp)); tg.create_thread(boost::bind(&ProcessPacket::process,&
pp)); while(true
) { int rt=0
; rt=recv(s,buf,sizeof(buf),0
); if(SOCKET_ERROR==
rt) { cout<<getLastError()<<
endl; continue
; } Packet packet; packet.assign(buf); pp.pushQueue(packet); } closesocket(s); WSACleanup(); } catch(exception&
e) { cout<<e.what()<<
endl; } return 0
; }
转载请注明原文地址: https://ibbs.8miu.com/read-29561.html