游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3151|回复: 4

请教关于iocp的问题

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-8-27 13:09:00 | 显示全部楼层 |阅读模式
     最近在学习iocp,有几个问题没想明白,在这里请教各位:
1.我在网上看到有人说iocp的难点在于如何保证socket的正确释放,否则可能出问题,为什么说使用IOCP时要保证socket的正确释放呢?如果socket没有正确释放会怎么样呢?
2.使用iocp时要怎么做才能让socket正确释放呢?

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2009-9-7 17:17:00 | 显示全部楼层

Re:请教关于iocp的问题

难点是多线程处理。

保证正确顺序释放的一个方法是给线程处理编号。

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2009-9-9 16:17:00 | 显示全部楼层

Re:请教关于iocp的问题

1,协仪栈会被塞满,后续连接不成功.
2,心跳包验证,或,定时验证,没有改变某自定义标志位的,可以断开.

不过,楼上说的不错,,多线程,,小心点,,,,可能让你抓狂.

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-8-21 17:03:00 | 显示全部楼层

Re: 请教关于iocp的问题

iocp一般都是用做大型服务器,如果不能及时判断出一个socket是否断线,不能及时清除的话,就会造成很严重的资源泄露。
保证措施一般三种方案,socket库本身的SO_KEEPALIVE 机制;WSAIoctl SIO_KEEPALIVE_VALS 机制;再就是后台起线程,心跳包检测。

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2010-8-28 14:17:00 | 显示全部楼层

Re:请教关于iocp的问题

IOCP需要注意的地方很多。

socket释放很简单,只需要closesocket即可。我想你指的释放是当这个socket用户对象有多个引用的情况,那样只需要个每一个用户对象一个ref即可。

如果是abort关闭,那么所有未决的IO req均会立即返回。
如果是graceful关闭,那么会linger一段时间或者block closesocket。

最重要的是当你handle io的时候,你所post的key必须有效。这就是异步+引用计数的问题了。


对于检测socket断线,我的建议是socket层及应用层双方面同时检测。

你问的问题很模糊,貌似是一个初学者,还是先看看IOCP的基本资料吧。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-18 20:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表