z***e 发帖数: 5393 | 1 client<=>server
两边都执行同样的代码:
socket.Shutdown(...)
socket.Close()
sever那边没问题,但是client这边的socket就进入FIN_WAIT_2的阶段,傻等最后一个
FIN,但是那是不可能的(因为server已经close了);
这个怎么让client端的socket关掉?源代码是C#.
我现在是让server端来close socket,然后client这边再close一次,但是看起来很愚
蠢的感觉... |
z***e 发帖数: 5393 | 2 自己顶。
换句话说就是两边不能同时shutdown/close,换成client side close socket,但是这
样就进入TIME_WAIT,google了半天,都是说这是无法避免的...不会吧... |
p***o 发帖数: 1252 | 3 有啥关系?
【在 z***e 的大作中提到】 : 自己顶。 : 换句话说就是两边不能同时shutdown/close,换成client side close socket,但是这 : 样就进入TIME_WAIT,google了半天,都是说这是无法避免的...不会吧...
|
n******t 发帖数: 4406 | 4 TIME_WAIT is a feature of TCP, not a bad thing at all.
【在 z***e 的大作中提到】 : 自己顶。 : 换句话说就是两边不能同时shutdown/close,换成client side close socket,但是这 : 样就进入TIME_WAIT,google了半天,都是说这是无法避免的...不会吧...
|
s***r 发帖数: 500 | 5
这个感觉就是TCP协议的缺陷,没啥好办法...... 大量socket open/close无可避免的
要造成许多TIME_WAIT。还是想办法用persistent connection比较好。。。
【在 z***e 的大作中提到】 : client<=>server : 两边都执行同样的代码: : socket.Shutdown(...) : socket.Close() : sever那边没问题,但是client这边的socket就进入FIN_WAIT_2的阶段,傻等最后一个 : FIN,但是那是不可能的(因为server已经close了); : 这个怎么让client端的socket关掉?源代码是C#. : 我现在是让server端来close socket,然后client这边再close一次,但是看起来很愚 : 蠢的感觉...
|
j********e 发帖数: 124 | 6 TIME_WAIT 对TCP是必须的。试想,一个刚close的TCPsession还可以立即再打开,而且
,TCP另一端的最后一个FIN却在网络中滞留了一段时间才到达这一端,那么上一个
session的FIN就串到后一个session了,这一端会以为session又被对方close了。
OS 都会保证刚关的socket不能立刻再打开。最早的BSD Unix就留下了的传统,后来的
Windows 应该不敢改吧。 |
s*******e 发帖数: 27 | 7 Have you tried DontLinger option? |