⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 66.htm

📁 unix高级编程原吗
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<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 + -