完成端口的一个奇怪的问题.高手进来.

akun 2006-09-14 03:53:52
accept创建了一个连接1,WSARecv发起一个重叠recv操作,close此连接socket;
立刻accetp创建连接2,重用了上面socket,WSARecv发起一个重叠recv操作,
然后重叠操作完成,接收的数据是连接2的数据,但是却写入连接1发出的重叠
recv操作指定的buffer中,而且返回的lpOverlapped也是连接1的;

GetQueuedCompletionStatus 没有先返回连接1的重叠recv
操作失败,却先处理了连接2的重叠recv操作,completeKey是连接2的,数据也是,就是buffer
和lpOverlapped是连接1的。

高分求组,在线等...
...全文
475 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mycs2005 2006-10-16
  • 打赏
  • 举报
回复
DisconnectEx 的socket是否要用 TransmitFile TF_DISCONNECT TF_REUSE_SOCKET 一下
akun 2006-10-09
  • 打赏
  • 举报
回复
up一下.
尝试用DisconnectEx+完成操作引用计数, 可以做到安全关闭连接.

但是DisconnectEx关闭连接,但是并没有释放SOCKET资源,msdn说DisconnectEx的socket可以给ConnectEx, AccpetEx重用, 就是说SOCKET被占用了.

我想这样就会导致某个进程接收大量连接断开后,仍然占用这些socket资源, 使得其他进程不能accept客户端连接. 我试验证实确实会出现这样的情况...

DisconnectEx的socket, 再用closesocket, 虽然返回成功, 但也没有效果.

我希望能象closesocket一样把socket资源归还给系统, 怎么做?

企盼星星们给点帮助.
akun 2006-09-20
  • 打赏
  • 举报
回复
尝试用DisconnectEx+完成操作引用计数, 可以做到安全关闭连接.

但是DisconnectEx关闭连接,但是并没有释放SOCKET资源,msdn说DisconnectEx的socket可以给ConnectEx, AccpetEx重用, 就是说SOCKET被占用了.

我想这样就会导致某个进程接收大量连接断开后,仍然占用这些socket资源, 使得其他进程不能accept客户端连接. 我试验证实确实会出现这样的情况...

DisconnectEx的socket, 再用closesocket, 虽然返回成功, 但也没有效果.

我希望能象closesocket一样把socket资源归还给系统, 怎么做?

企盼星星们给点帮助.
akun 2006-09-16
  • 打赏
  • 举报
回复
连接1的重叠recv 操作还没有完成(GetQueuedCompletionStatus没有获得此recv的完成信息), 此连接的socket被close;

接着此socket被系统重用到下一个连接2了, 应用程序发出recv重叠操作请求, 接收到客户端发来的数据, 数据被送到了连接1发起的recv操作指定的buffer中, 传回的overlapped也是连接1的.

不知道我说清楚了没有?

就是说连接1的重叠操作被用到连接2上面了.

解决方法当然是closesocket前,必须保证结束所有的重叠操作.
不知道还有什么方法?

CancelIo应该也有效,但是我还要保证closesocket前,send出去的数据客户端一定能够收到, 不确定CanelIo的具体行为怎样的......

lianglp 2006-09-15
  • 打赏
  • 举报
回复
MS 不可能
DentistryDoctor 2006-09-15
  • 打赏
  • 举报
回复
连接1都关闭了,这显然是不可能的。
acejoy 2006-09-15
  • 打赏
  • 举报
回复
有点糊涂,不知道你这个程序是干啥的。
完成端口是异步的,完成的顺序未必是提交的顺序。

──────────────────────
国内专业的ACE论坛开通:
www.acejoy.com
www.acedevelop.com
涉及ACE使用和开发,服务器端软件的设计,P2P技术,
网络编程、应用开发等内容。
欢迎加入,大家一起交流、学习成长!

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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