首页 新闻 会员 周边 捐助

我最近在学socket的开发,我发现socket.DisConnect这个方法断开连接比较卡

-1
悬赏园豆:10 [已关闭问题] 关闭于 2014-01-16 12:35

我想知道,这是什么原因导致的,这个socket是客户端连接成功过的,也成功发过消息出去的,测试时是用本地IP

sfy的主页 sfy | 初学一级 | 园豆:84
提问于:2014-01-08 16:35
< >
分享
所有回答(2)
0

直接close不久行了

幕三少 | 园豆:1384 (小虾三级) | 2014-01-09 08:19

网络上找的方案都是close的,但是这不是我想要知道的,我想要知道的是为什么用DisConnect方法断开连接会很卡

支持(0) 反对(0) sfy | 园豆:84 (初学一级) | 2014-01-09 08:45
0

 你需要详细了解一下DisConnect做了些什么。

 

以下来自于msdn:

http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.disconnect(v=vs.110).aspx

如果您使用的是面向连接的协议,请使用此方法关闭该套接字。 此方法中断连接并将 Connected 属性设置为 false。 不过,如果 reuseSocket 为 true,则可以重用该套接字。

要确保在关闭套接字前已发送和接收所有数据,应在调用 Disconnect 方法前调用 Shutdown

如果需要在不首先调用 Shutdown 的情况下调用 Disconnect,则可以将 DontLingerSocket 选项设为 false 并指定非零超时间隔,以确保排队等待输出的数据已发送。 之后,Disconnect 将一直处于阻止状态,直到数据发送出去或者指定的超时过期。 如果将 DontLinger 设置为 false,并且指定了一个非零的超时间隔,Close将会释放连接并自动放弃排队等待输出的数据。

南昌炒粉 | 园豆:760 (小虾三级) | 2014-01-09 09:03

Shutdown方法在执行DisConnect前已经执行过了,执行过后DisConnect的执行时间还是2分钟左右,我在网络上查到的是和注册表里的超时时间有关,但是具体是注册表哪个项,还没找到

支持(0) 反对(0) sfy | 园豆:84 (初学一级) | 2014-01-10 10:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册