IOCP运行一段时间后,AcceptEx不返回,按回车键继续

andensy 2015-08-10 02:08:43
IOCP服务端运行一段时间后,客户端请求服务器接收不到,有点像是GetQueuedCompletionStatus没返回,但是这个时候在控制台按下回车键,程序就继续运行.. 很奇怪的问题,像是GetQueuedCompletionStatus监听线程睡眠了,回车键唤醒了它。有谁碰到过类似问题吗?Win32控制台程序。
...全文
287 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
版主大哥 2015-08-11
  • 打赏
  • 举报
回复
所以就你上代码啊,不然怎么帮你找问题 没有碰到过这种问题
andensy 2015-08-11
  • 打赏
  • 举报
回复
引用 5 楼 xihu1364 的回复:
是不是aio_socket_process这个线程里面有cin操作之类的??
木有啊,大哥!不过主线程里倒是有一个等待退出输入的监听循环:

	while (TRUE)
	{
		#if defined(WIN32)
		if(kbhit())
		{
			int ch = 0;
			while(kbhit())
				ch = getch();
			if(ch == 'Q' || ch == 'q')
				break;
		}
		#endif
	}
但是,这个应该不影响工作线程的执行吧? 有没有可能是工作线程睡眠了?在网络iocp服务这块,你们碰到过类似的问题吗?
xian_wwq 2015-08-10
  • 打赏
  • 举报
回复
应该和acceptex没有太大关联 可以换成accept方式进行测试
版主大哥 2015-08-10
  • 打赏
  • 举报
回复
是不是aio_socket_process这个线程里面有cin操作之类的??
worldy 2015-08-10
  • 打赏
  • 举报
回复
英语大比拼。
andensy 2015-08-10
  • 打赏
  • 举报
回复
引用 1 楼 xihu1364 的回复:
show you code
code is so much, I can't copy all of them. just like this:

DWORD WINAPI  thread_proc(LPVOID lpParam)
{
	while(1)
	{
        aio_socket_process(INFINITE);
	}
	return  1;
}
int aio_socket_process(int timeout)
{
	BOOL status;
	DWORD bytes;
	ULONG completionKey;
	OVERLAPPED *pOverlapped;
	struct aio_context *ctx;
	struct aio_context_action *aio;

	status = GetQueuedCompletionStatus(s_iocp, &bytes, &completionKey, &pOverlapped, timeout);
	if(status)
	{}

}
when one AcceptEx returned , another new will be post.
aqiu348503 2015-08-10
  • 打赏
  • 举报
回复
可能系统休眠网络中断了
版主大哥 2015-08-10
  • 打赏
  • 举报
回复
show you code

18,356

社区成员

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

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