设置IP_OPTIONS选项不成功,WSAGetLastError( )函数返回0值是什么错误?

ridge.chang 2009-08-19 01:28:42
我参考着说,写了一个ping程序,但是在输入 -r选项时,总是输出:

setsockopt(IP_OPTIONS) failed: 0

这样的错误。其他ping选项的测试都正确

WSAGetLastError( )函数返回0值,这会是是什么错误呢?
望各位大虾支支招!

相关代码如下:
void PingTest(int timeout)
{
int ret;

//创建原始套接字,该套接字用于ICMP协议
m_socket = WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,WSA_FLAG_OVERLAPPED);
//如果套接字创建不成功
if(m_socket == INVALID_SOCKET)
{
printf("WSASocket() failed: %d\n",WSAGetLastError());
return;
}
//若要求记录路由选项
if(RecordFlag) //RecordFlag是一个全局变量,当输入 -r 时,RecordFlag = true
{
//IP选项每个字段用0初始化
ZeroMemory(&IpOption,sizeof(IpOption));
//为每个ICMP包设置路由选项
IpOption.code = IP_RECORD_ROUTE;
IpOption.ptr = 4;
IpOption.len = 39;

ret = setsockopt(m_socket,IPPROTO_IP,IP_OPTIONS,(char*)&IpOption,sizeof(IpOption));
if(ret == SOCKET_ERROR);
printf("setsockopt(IP_OPTIONS) failed: %d\n",WSAGetLastError());
}
.
.
.
.
}
...全文
438 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ridge.chang 2009-08-19
  • 打赏
  • 举报
回复
谢谢各位了
rendao0563 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goodname 的回复:]
if(ret == SOCKET_ERROR); //这里多了一个分号
[/Quote]

不管ret是何值printf("setsockopt(IP_OPTIONS) failed: %d\n",WSAGetLastError()); 都将被执行。
mstlq 2009-08-19
  • 打赏
  • 举报
回复
ret = setsockopt(m_socket,IPPROTO_IP,IP_OPTIONS,(char*)&IpOption,sizeof(IpOption));
if(ret == SOCKET_ERROR);
printf("setsockopt(IP_OPTIONS) failed: %d\n",WSAGetLastError());
}
一般来说,只要WSAGetLastError()==0,那么基本上可以定性为写代码时粗心大意拼写之过^_^
goodname 2009-08-19
  • 打赏
  • 举报
回复
if(ret == SOCKET_ERROR); //这里多了一个分号

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧