关于IOCP的一个异常问题

helloqzg 2006-07-04 05:01:07
4个工作者线程,每一个连接5个并发收,两个IOCP对象。
一个对象用于连接管理TCP Server,其中有两个辅助线程,一个用于重连(每十秒查询一次,如果没连接则进行连接,两个连续的连接之间有100ms延时),另一个用于实时对每个TCP Server进行通信,大约每一秒向一个TCP Server发送一次。
另一个对象用于管理TCP Client,只是相应TCP Client的命令,如果接收到命令则进行返回。

现在遇到的问题是:启动程序后,连接(十多个连接)的时候CPU会上升到50%,有时CPU在连接成功后会降下来,有时将不下来,紧接着会出现各个TCP Server连续的连接和断开现象,收发也出现异常。大概是什么原因,请各位看官指教,谢谢!

会不会是第一个对象中有两个辅助线程,一个对连接后的Socket进行CreateIoCompletionPort,而另一个对其他连接上的Socket进行收发,导致IOCP部分产生冲突?
...全文
378 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloqzg 2006-07-17
  • 打赏
  • 举报
回复
后来经过调试发现,连接上的Socket都是在GetQueuedCompletionStatus时出现ERROR_NETNAME_DELETED而关闭的。

什么原因导致了Socket的关闭???
周江涛 2006-07-13
  • 打赏
  • 举报
回复
这种情况只有记详细日志来跟踪问题。
helloqzg 2006-07-12
  • 打赏
  • 举报
回复
程序中,我在关闭Socket的地方设置了断点,在断开的时候,程序没有主动关闭,是在GetQueuedCompletionStatus时返回0,GetLastError时返回ERROR_NETNAME_DELETED而关闭的,好像是通信过程中导致了Socket关闭。

纳闷的是——什么原因导致了Socket的关闭?
CPP2008 2006-07-10
  • 打赏
  • 举报
回复
1 还不是完全明白你说的。

2 感觉 “有些是在WSARecv和WSASend时出现WSAENOTSOCK而关闭的。”你这个错误,是不是你的socket已经失效了。

3 你估计有同步吧,应该是同步没有做好。你这样的连接数量应该不是问题。
helloqzg 2006-07-10
  • 打赏
  • 举报
回复
helloqzg 2006-07-06
  • 打赏
  • 举报
回复
先设置非阻塞方式连接,然后设置连接超时(1s),返回后又设回阻塞方式。
10s查询一次,每个连接之间的连接间隔是100ms,即当前的连接返回后Sleep(100),然后进行下一个连接(重新建立socket)。
按说不会出现楼上两位所说的情况。

后来我跟踪了一下,发现部分连接上的Socket是在GetQueuedCompletionStatus时出现ERROR_NETNAME_DELETED而关闭的,有些是在WSARecv和WSASend时出现WSAENOTSOCK而关闭的。

我把上面的Sleep(100)改成Sleep(300)会改善很多,难道说连续的两个Connect之间须有足够的延时?
wha_eagle 2006-07-06
  • 打赏
  • 举报
回复
你连接的时候会不会出现这样的问题:
一个socket发起connect请求,在还没有返回是否连接成功的时候,已经间隔了100ms,然后你又对该socket发起一次connect请求呢?
Pipi0714 2006-07-06
  • 打赏
  • 举报
回复
设置socket连接等待超时应该就可以了。假如连接的对象不存在你的socket对象在等待
Hellboy 2006-07-06
  • 打赏
  • 举报
回复
基本上是哪部分的代码的问题,仔细看看自己的代码。
或者,有个简单的方法,试试intel vtune(只能用在intel的cpu上,AMD也有自己的工具)。

可以看到每句语句的执行占用cpu的时间。


==========广告签名============
http://shop33712512.taobao.com
淘宝店,专卖化妆品、自家蜂产品
==========广告签名============
helloqzg 2006-07-05
  • 打赏
  • 举报
回复

(本想给高分的,但只能给这么点分了)

18,356

社区成员

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

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