socket 服务器端程序recv()会有一定概率出现10038错误

JinxLeader 2015-10-12 05:51:06
我写了一个socket 服务器程序,其中监听线程常驻,接收线程在客户端发起链接后创建,客户端关闭后也会跟着关闭。对方的客户端程序每次发送一条信息后就关闭链接,下次发送时重新建立连接。
现在的问题是我服务器端程序接收到客户端程序会有约30%概率返回10038。
我们的程序都是顺序执行的,每次链接都是新建的,我个人觉得不应该出现无效的socket 套接字。

我还有另一个常驻的服务器端程序,定时1s向外发送256字节信息。当这个线程工作时才会出这个bug。
请问会是这两个线程冲突造成的10038错误吗?

麻烦大家帮我分析一下。
...全文
676 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxinyanzi 2016-10-13
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
某个端口的套接字关闭后,似乎有一段时间里,还不能用这个端口创建套接字,必须使用别的端口,在许多场合下遇到这个问题,原因不明
tcp关闭连接的四次握手,了解一下,你就知道原因了。
JinxLeader 2015-10-16
  • 打赏
  • 举报
回复
问题解决了,我创建socket接收线程使用NEW新建socket。我在另一个地方也用NEW 新建变量,那个变量偶尔会内存越界。
赵4老师 2015-10-13
  • 打赏
  • 举报
回复
《Windows核心编程》
JinxLeader 2015-10-13
  • 打赏
  • 举报
回复
现在唯一确定的事实只有在我另一个服务器线程工作时,才会出这种10038的bug。但是我可以确定,两个线程是互相独立的。 我想请教有哪些情况会使线程将socket 关闭。
JinxLeader 2015-10-13
  • 打赏
  • 举报
回复
引用 5 楼 wxhxj0268 的回复:
服务端监听是常态,收到连接的Socket后,服务端可生成一个新的线程与该Socket建立连接,所有的连接管理应该在线程内部完成,与是否重建连接无关系,Socket释放后线程也就结束了。


我确实是每次收到连接后就生成一个新线程与该Socket连接。
在不打开另一个服务器端线程时不会有问题,我想是不是两个服务器端线程存在某些冲突导致的。
笨笨仔 2015-10-12
  • 打赏
  • 举报
回复
服务端监听是常态,收到连接的Socket后,服务端可生成一个新的线程与该Socket建立连接,所有的连接管理应该在线程内部完成,与是否重建连接无关系,Socket释放后线程也就结束了。
JinxLeader 2015-10-12
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
某个端口的套接字关闭后,似乎有一段时间里,还不能用这个端口创建套接字,必须使用别的端口,在许多场合下遇到这个问题,原因不明


我的情况是平时可以正常使用,但是当我另一个服务器端程序启动并定时向外发送时,这个服务器线程会出现这样的问题。
但这两个线程是完全独立的,我觉得不应该会出现一个线程把另一个线程socket 关闭的情况。
JinxLeader 2015-10-12
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
先看看对饮的socket对象是否正确,然后你释放的时候有没有正确关闭释放socket


请问"对应的socket "具体是指什么?
每次链接结束以后,我是使用closesocket()来关闭的。
worldy 2015-10-12
  • 打赏
  • 举报
回复
某个端口的套接字关闭后,似乎有一段时间里,还不能用这个端口创建套接字,必须使用别的端口,在许多场合下遇到这个问题,原因不明
oyljerry 2015-10-12
  • 打赏
  • 举报
回复
先看看对饮的socket对象是否正确,然后你释放的时候有没有正确关闭释放socket

18,355

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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