请教为什么“setsockopt(s,SOL_SOCKET,SO_RCVTIMEO, (char *)&nRecvTimeOut, ...)”不管用!!!

舟中夜起 2001-06-20 02:23:00
我现在自己来设定为非阻塞模式的方法,然后自己计算超时可以搞定,但是不明白用setsockopt为什么就不行,msdn明明说明支持的啊!!!

大师可否告知。。。
...全文
3202 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
舟中夜起 2001-09-09
  • 打赏
  • 举报
回复
BTW: int timeout
舟中夜起 2001-09-09
  • 打赏
  • 举报
回复
timeout = 5000;//ms
nRet = setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout, sizeof(timeout));
jianweiweng 2001-09-08
  • 打赏
  • 举报
回复
如何触发超时机制呢?
舟中夜起 2001-06-21
  • 打赏
  • 举报
回复
查一下microsoft站点,里面对此有详细说明
舟中夜起 2001-06-21
  • 打赏
  • 举报
回复
你看msdn中的ping例子,里面就没有设置重叠方式
gPolaris 2001-06-21
  • 打赏
  • 举报
回复
这可不是BUG,socket默认是重叠方式,而用WSASocket必须自己指定参数,
怎么能说是WSASocket的bug呢?用法而已

重叠socket不在乎该socket是阻塞还是不阻塞的(Blocking),也就是overlap与blocking无关,你要设置超时,只有重叠socket支持这个功能,所以就会出现才开始的情况
舟中夜起 2001-06-21
  • 打赏
  • 举报
回复
up
舟中夜起 2001-06-20
  • 打赏
  • 举报
回复
请教overlapped和阻塞的区别是什么?难道就是两种不同的定义?谢谢
kock 2001-06-20
  • 打赏
  • 举报
回复
socket() 默认是OVERLAP的,见其帮助.
舟中夜起 2001-06-20
  • 打赏
  • 举报
回复
找到原因了,这是WSASocket的一个bug,如要设置timeout,必须把最后一个参数设置为
WSA_FLAG_OVERLAPPED

唉,没想到platform sdk的例程也有错误。

BTW:目前网络上的ping例子都有类似错误
舟中夜起 2001-06-20
  • 打赏
  • 举报
回复
我把WSASocket (AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL, 0,0)
换成
socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);

就可以,但是为什么?
lts 2001-06-20
  • 打赏
  • 举报
回复
怎么不管用,
我的程序里就是这样写的
int timeout = 150000;
setsockopt(m_hSocket,SOL_SOCKET,SO_RCVTIMEO,(char *)&timeout,sizeof(int));
就有用。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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