论坛: 原创软件 标题: socket超时问题 复制本贴地址    
作者: gccbuilder [gccbuilder]    论坛用户   登录
WORD version=MAKEWORD(2,1);
WSADATA wsadata;
WSAStartup(version,&wsadata);
if(wsadata.wVersion!=version)
printf("wrong!!\n");
ip="192.168.1.15";
m_iphostsource=inet_addr(ip);
m_s=socket( AF_INET, SOCK_RAW, IPPROTO_IP );
int rcvtimeo=5000; //5 sec insteadof 45 as default

setsockopt(m_s,SOL_SOCKET,SO_RCVTIMEO,(const char *)&rcvtimeo, sizeof(rcvtimeo));
sa.sin_family=AF_INET;
sa.sin_port=htons(4000);
sa.sin_addr.s_addr=m_iphostsource;
if(bind(m_s,(sockaddr *)&sa,sizeof(sa))!=0)
printf("bind error:%d\n",WSAGetLastError());
if(WSAIoctl(m_s,SIO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)!=0)
printf("Ioctl error:%d\n",WSAGetLastError());
if(recv(m_s,buf,sizeof(buf),0)<0)
printf("recv error:%d\n",WSAGetLastError());

编译后的错误代码是10060,MSDN说是连接超时,需要我调用connet()和WSAConnect()
可是为什么呢?有人帮我解释一下吗?


地主 发表时间: 04-02-27 17:42

回复: TomyChen [quest]   版主   登录
试一下把
socket()第三个参数改成IPPROTO_RAW
去掉setsockopt();
用WSAIoctl()就够了吧


B1层 发表时间: 04-03-01 16:25

回复: kailangq [kailangq]   版主   登录


B2层 发表时间: 04-04-02 05:52

论坛: 原创软件

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号