实践证明重用SOCKET是可以实现的,当服务端主动关闭套接字的时候此SOCKET可以重用(完全的4次握手)
可从客户端关闭的时候,服务端的SOCKET总是处于CLOSE_WAIT状态,导致下一次AcceptEx失败.
网上有资料说设置LINGER可以缩短CLOSE_WAIT的时间,但是对于异步好像是无效的.
我是用的TELNET做测试,连接之后直接X掉,服务端出现CLOSE_WAIT状态,客户端(实际上进程已退出)出现WAIT_FIN_2状态.
请问大家有什么方法可以解决这个问题,包括写驱动也可以.
16 个解决方案
#1
你的重用的意思是,客户端关闭,服务器那边不把socket close 就继续用?
但我觉得这样不好吧?不太懂,来学习。
但我觉得这样不好吧?不太懂,来学习。
#2
是的,不用closesocket,断开之后继续用,在研究这方面.
#3
创建线程和关闭线程的开销大,于是有了线程池,
您的socket迟,如果能实现,原理也应该和线程池类似吧,
现在有些疑义的地方在于,创建socket的开销大吗?
并不是所有的对象用池来管理是好的,线程池也有适用场景。
如果管理的开销 远远大于了socket的创建开销,那就没必要了。
您的socket迟,如果能实现,原理也应该和线程池类似吧,
现在有些疑义的地方在于,创建socket的开销大吗?
并不是所有的对象用池来管理是好的,线程池也有适用场景。
如果管理的开销 远远大于了socket的创建开销,那就没必要了。
#4
创建socket也是个大开销的。。某种意义上说
#5
http://www.hacknp.cn/
这里面有一个“AsyncSelect模型QQ程序教程区 ”栏目
这里面有一个“AsyncSelect模型QQ程序教程区 ”栏目
#6
要VIP才能访问.
回3楼的朋友,SOCKET也是一种内核对象,创建和销毁的开销都不小,还要进行特权级的切换
只是现在的电脑配置很高,低配置的就能感觉得到.
#7
LINGER可能导致closesocket后线程等待,也可能是直接被RST掉
如果你想快,就设置l_onoff=1;l_linger=0
#8
不行的,我都愁死了......
#9
close_wait状态 重新主动打开那个端口会失败
不过来自客户端的连接是会成功的
不信你试试.
不过来自客户端的连接是会成功的
不信你试试.
#10
看过一些资料,好像tx的socket就是重用的,因为会经历几个过程:比如密码验证,登录……每个过程都会建立新的连接,为了确保服务器的高效率,它会采用你说的这种做法,重复性创建socket会浪费很多资源的
#11
冒昧的问一下,tx是什么???腾讯吗???
我需要的是服务端的重用,不是客户端的.
我需要的是服务端的重用,不是客户端的.
#12
调用DisconnectEx函数关闭链路,不要用closesocket
#13
就是不是closesocket,一个SOCKET反复用而已
#14
#15
Acceptex与Disconnectex 配对使用,可以达到服务器端Socket重用
Connectex与Disconnectex 配对使用,在被动关闭的情况下,可以达到客户端Socket重用
Connectex与Disconnectex 配对使用,在被动关闭的情况下,可以达到客户端Socket重用
#16
http://blog.sina.com.cn/s/blog_759803690101a7ul.html
这个里面对socket池有比较清晰的解释
这个里面对socket池有比较清晰的解释
#1
你的重用的意思是,客户端关闭,服务器那边不把socket close 就继续用?
但我觉得这样不好吧?不太懂,来学习。
但我觉得这样不好吧?不太懂,来学习。
#2
是的,不用closesocket,断开之后继续用,在研究这方面.
#3
创建线程和关闭线程的开销大,于是有了线程池,
您的socket迟,如果能实现,原理也应该和线程池类似吧,
现在有些疑义的地方在于,创建socket的开销大吗?
并不是所有的对象用池来管理是好的,线程池也有适用场景。
如果管理的开销 远远大于了socket的创建开销,那就没必要了。
您的socket迟,如果能实现,原理也应该和线程池类似吧,
现在有些疑义的地方在于,创建socket的开销大吗?
并不是所有的对象用池来管理是好的,线程池也有适用场景。
如果管理的开销 远远大于了socket的创建开销,那就没必要了。
#4
创建socket也是个大开销的。。某种意义上说
#5
http://www.hacknp.cn/
这里面有一个“AsyncSelect模型QQ程序教程区 ”栏目
这里面有一个“AsyncSelect模型QQ程序教程区 ”栏目
#6
要VIP才能访问.
回3楼的朋友,SOCKET也是一种内核对象,创建和销毁的开销都不小,还要进行特权级的切换
只是现在的电脑配置很高,低配置的就能感觉得到.
#7
LINGER可能导致closesocket后线程等待,也可能是直接被RST掉
如果你想快,就设置l_onoff=1;l_linger=0
#8
不行的,我都愁死了......
#9
close_wait状态 重新主动打开那个端口会失败
不过来自客户端的连接是会成功的
不信你试试.
不过来自客户端的连接是会成功的
不信你试试.
#10
看过一些资料,好像tx的socket就是重用的,因为会经历几个过程:比如密码验证,登录……每个过程都会建立新的连接,为了确保服务器的高效率,它会采用你说的这种做法,重复性创建socket会浪费很多资源的
#11
冒昧的问一下,tx是什么???腾讯吗???
我需要的是服务端的重用,不是客户端的.
我需要的是服务端的重用,不是客户端的.
#12
调用DisconnectEx函数关闭链路,不要用closesocket
#13
就是不是closesocket,一个SOCKET反复用而已
#14
#15
Acceptex与Disconnectex 配对使用,可以达到服务器端Socket重用
Connectex与Disconnectex 配对使用,在被动关闭的情况下,可以达到客户端Socket重用
Connectex与Disconnectex 配对使用,在被动关闭的情况下,可以达到客户端Socket重用
#16
http://blog.sina.com.cn/s/blog_759803690101a7ul.html
这个里面对socket池有比较清晰的解释
这个里面对socket池有比较清晰的解释