游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3232|回复: 9

有没办法可以第一时间检测出SOCKET_ERROR

[复制链接]

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2004-1-7 16:17:00 | 显示全部楼层 |阅读模式

服务器中使用了WSAAsyncSelect( Socket, ……, ……, FD_READ|FD_CLOSE )来检测网络事件,
当客户端发信息过来,或者客户端断开连接时,服务器能马上获知消息,
可是,如果客户端网络异常中断,服务器却无法收到消息,直到调用recv()或send()为止。
这样是会造成许多麻烦的,请问高手们,可有好的对策?
让服务器能像响应FD_READ和FD_CLOSE事件那样,第一时间获知客户端SOCKET出错?

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2004-1-7 16:44:00 | 显示全部楼层

没可能!!

!!!!

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2004-1-7 17:23:00 | 显示全部楼层

Re: 没可能!!

谜の名侦探: 没可能!!
!!!!


重大打击。。。。。
没好的办法了? [em4]

1

主题

19

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2004-1-7 17:45:00 | 显示全部楼层

Re:有没办法可以第一时间检测出SOCKET_ERROR

可以加一个ping函数。

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2004-1-7 20:25:00 | 显示全部楼层

Re:有没办法可以第一时间检测出SOCKET_ERROR


通常网络游戏中玩家数量可达到数千,甚至上万,若每隔一段时间ping一遍,资源消耗可不少。。。

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2004-1-8 00:19:00 | 显示全部楼层

Re:有没办法可以第一时间检测出SOCKET_ERROR


我打算使用select()来检测所有Socket是否处于错误状态,请问是否可行?
调用select()比起send()所占用的网络资源是否会比较少?有哪位高手能说明一下,小弟感激不尽!

25

主题

304

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
发表于 2004-1-8 09:55:00 | 显示全部楼层

WSAAsyncSelect和SELECT都一样的.

非法断开只有用PING才能很快的解决.

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2004-1-8 10:23:00 | 显示全部楼层

Re:有没办法可以第一时间检测出SOCKET_ERROR

用setsockopt,KEEPALIVE,再把注册表中的下列项进行修改(2K)
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters]

"KeepAliveTime"=dword:000004b0
就这个值了,你自己改吧,


不过一些老鸟不喜欢用这个方法,喜欢发存活包。这反正也随便了。

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2004-1-9 00:08:00 | 显示全部楼层

现在好象没问题了~~~


我本来在家里测试异常断线,在局域网禁用本地连接,检测不到断开。
但后来,我直接拔网线,却检测到了,响应了消息,recv后返回SOCKET_ERROR,刚才找网上的朋友测试,也是一样~~~

唉~~~白辛苦两天~~~原来一切都没问题。

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2004-1-9 09:27:00 | 显示全部楼层

Re:有没办法可以第一时间检测出SOCKET_ERROR

是你运气好,有时候拨网线对方是检测不到的,假如当时不处在一个活动期间。

所以存活包是一定要的。不然呵呵..
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-25 00:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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