closesocket阻塞

huangyimo 2020-01-06 08:22:33
调用closesocket的时候阻塞,等了好几分钟还是 阻塞。试着调用过:
linger opt;
opt.l_onoff = 1; // (在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)
opt.l_linger = 0; // (容许逗留的时间为0秒)
setsockopt(mSockfd, SOL_SOCKET, SO_LINGER, (const char*)&opt, sizeof(linger)

但是还是阻塞。msdn上面说:A Winsock client must never issue closesocket on s concurrently with another Winsock function call.
我已经检查过,在调用closesocket的时候没有调用其他Winsock function。但还是出现同样的情况。

麻烦各位大神提示一下,有更好的解决思路。
...全文
222 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
地球太平洋 2020-01-13
  • 打赏
  • 举报
回复
”tcp正常关闭了,closesocket却还阻塞“ , 这的确不正常。
是不是你弄错了,阻塞在别处了? 或者你关闭的socket不是你正在用的?
零隐 2020-01-10
  • 打赏
  • 举报
回复
允许逗留时间为1,试一下。
话说允许逗留了,为什么逗留时间要为0,如果不允许逗留直接把opt.l_onoff = 0;不就好了。
huangyimo 2020-01-10
  • 打赏
  • 举报
回复
引用 1 楼 地球太平洋 的回复:
关闭的时候阻塞,通常是没有收到对端的回应数据。 正常情况下,应该可以强行关闭,但这个选项是否支持,和系统的socket实现方式有关。 可以调试一下对端是否接收到关闭请求。
当卡在closesocket的时候, 我用tcpview查看,已经找不这个链接。证明这个socket已经完成了4次分手。
地球太平洋 2020-01-07
  • 打赏
  • 举报
回复
关闭的时候阻塞,通常是没有收到对端的回应数据。
正常情况下,应该可以强行关闭,但这个选项是否支持,和系统的socket实现方式有关。
可以调试一下对端是否接收到关闭请求。

64,692

社区成员

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

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