📄 66.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>123</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center"> ● UNIX网络编程 (BM: clown) </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="54.htm">上一层</a>][<a href="67.htm">下一篇</a>]
<hr><p align="left"><small>发信人: scz (小四), 信区: UNP <br>
标 题: 看看这段话 <br>
发信站: UNIX编程 (2001年08月31日13:24:02 星期五), 站内信件 <br>
<br>
Q: 编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思? <br>
<br>
A: 这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用 <br>
端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息, <br>
指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧 <br>
使用同一端口,此时 SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期 <br>
望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不 <br>
可能。 <br>
<br>
一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端 <br>
口。SO_REUSEADDR 仅仅表示可以重用本地本地地址、本地端口,整个相关五元组 <br>
还是唯一确定的。所以,重启后的服务程序有可能收到非期望数据。必须慎重使 <br>
用 SO_REUSEADDR 选项。 <br>
<br>
-- <br>
<br>
也许有一天,他再从海上蓬蓬的雨点中升起, <br>
飞向西来,再形成一道江流,再冲倒两旁的石壁, <br>
再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... <br>
※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 211.167.65.123] 发信人: scz <br>
(小四), 信区: UNP <br>
标 题: Re: 看看这段话 <br>
发信站: UNIX编程 (2001年08月31日13:27:58 星期五), 站内信件 <br>
<br>
这段话的论述不局限于Linux <br>
它是以TCP状态机为讨论对象的。 <br>
<br>
先调用close()的一方会进入TIME_WAIT状态 <br>
<br>
【 在 scz (小四) 的大作中提到: 】 <br>
: Q: 编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思? <br>
: A: 这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用 <br>
: 端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息, <br>
: 指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧 <br>
: 使用同一端口,此时 SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期 <br>
: 望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不 <br>
: 可能。 <br>
: 一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端 <br>
: 口。SO_REUSEADDR 仅仅表示可以重用本地本地地址、本地端口,整个相关五元组 <br>
: 还是唯一确定的。所以,重启后的服务程序有可能收到非期望数据。必须慎重使 <br>
: .................(以下省略) <br>
<br>
-- <br>
<br>
也许有一天,他再从海上蓬蓬的雨点中升起, <br>
飞向西来,再形成一道江流,再冲倒两旁的石壁, <br>
再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... <br>
※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 211.167.65.123] 发信人: ysq <br>
cn (岁月无声), 信区: UNP <br>
标 题: Re: 看看这段话 <br>
发信站: UNIX编程 (2001年08月31日13:48:22 星期五), 站内信件 <br>
<br>
它这句话是正确的,但它是针对服务器重启动的情况。 <br>
我觉得如果设了这个标志,在其它状态(例如TCP_ESTABLISHED的情况下)也能重复绑定。 <br>
有文档说,如果套接字都设了这个标志,只要其中没有套接字在倾听状态,就允许完全 <br>
重复绑定。 <br>
【 在 scz (小四) 的大作中提到: 】 <br>
: Q: 编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思? <br>
: A: 这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用 <br>
: 端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息, <br>
: 指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧 <br>
: 使用同一端口,此时 SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期 <br>
: 望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不 <br>
: 可能。 <br>
: 一个套接字由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端 <br>
: 口。SO_REUSEADDR 仅仅表示可以重用本地本地地址、本地端口,整个相关五元组 <br>
: 还是唯一确定的。所以,重启后的服务程序有可能收到非期望数据。必须慎重使 <br>
: .................(以下省略) <br>
-- <br>
※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 211.69.197.81] 发信人: scz <br>
(小四), 信区: UNP <br>
标 题: Re: 看看这段话 <br>
发信站: UNIX编程 (2001年08月31日13:59:21 星期五), 站内信件 <br>
<br>
<br>
【 在 ysqcn (岁月无声) 的大作中提到: 】 <br>
: 它这句话是正确的,但它是针对服务器重启动的情况。 <br>
: 我觉得如果设了这个标志,在其它状态(例如TCP_ESTABLISHED的情况下)也能重复绑定 <br>
。 <br>
: 有文档说,如果套接字都设了这个标志,只要其中没有套接字在倾听状态,就允许完全 <br>
: 重复绑定。 <br>
<br>
那是实现相关并且带扩展味道的。 <br>
这个标志其他都可以不理会,只要能处理这一种情况就足够了 <br>
而且这个不是局限于Linux的。Linux对传统Unix以及TCP/IP的践踏 <br>
是有目共睹的。扩展很多。 <br>
<br>
你觉得在ESTABLISHED下也能重复绑定,这个文档是Linux的还是RFC的呢? <br>
中间的区别可就大得很了。除非你写程序不打算移植。 <br>
<br>
不在liten状态而在后续(注意是后续)状态,原则上是可以重用得, <br>
面对得问题和time_wait一样。为什么最早局限在这个状态,是因为这里出现 <br>
冲突的可能很小,不会对c/s结构带来很大影响。但是如果在establish状态 <br>
都允许重用(老实话,我没写过这样的测试程序),实际意味着 <br>
允许另一个拥有相同相关五元组的连接出现,可能处理 <br>
TCP报文时,两个连接互相干扰,这个冲突的可能非常大 <br>
<br>
listen状态后原则上可以重用,前提是客户方随机选取半个相关五元组 <br>
基于这种考虑,重用后冲突不会太要命的多。 <br>
<br>
而以前只允许time_waite状态上的重用,即使客户方刻意选择了完全相同的 <br>
半个相关五元组,带来的冲突也不会非常致命。 <br>
<br>
以前这样设计,不是说想当然这么设计的,考虑很多现实因素的。 <br>
<br>
: 【 在 scz (小四) 的大作中提到: 】 <br>
: : Q: 编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思? <br>
: : A: 这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用 <br>
: : 端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息, <br>
: : 指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧 <br>
: : 使用同一端口,此时 SO_REUSEADDR 选项非常有用。必须意识到,此时任何非期 <br>
: .................(以下省略) <br>
<br>
-- <br>
<br>
也许有一天,他再从海上蓬蓬的雨点中升起, <br>
飞向西来,再形成一道江流,再冲倒两旁的石壁, <br>
再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... <br>
※ 修改:·scz 於 ★★ 欢迎光临 ★ 修改本文·[FROM: 211.167.65.123] <br>
※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 211.167.65.123] <br>
发信人: ysqcn (岁月无声), 信区: UNP <br>
标 题: Re: 看看这段话 <br>
发信站: UNIX编程 (2001年08月31日14:11:05 星期五), 站内信件 <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -