网页LED——基于http

Posted wddx5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网页LED——基于http相关的知识,希望对你有一定的参考价值。

当终止服务器运行后,再次进行调试时,出现bind error: Address Already in use

在bind函数调用前添加,即可免去Linux下的TIME_WAIT的将近两分钟的等待时间

int on=1;
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));

上面两行代码,把此套接字listenFd设置为允许地址重用(on=1,如果on=0就是不允许重用了)。这样每次bind的时候,如果此端口正在使用的话,bind就会把端口“抢”过来。就不会报错了。完美解决问题。

问题深入

既然TIME_WAIT这么讨厌,那它的存在有什么意义呢?毕竟服务器端已经中断掉连接了呀。记得之前在看UNP的时候,上面好像有提到过,继续翻书:

书上说,TIME_WAIT状态有两个存在的理由:

1. 可靠地实现TCP全双工连接的终止;

2. 允许老的重复分节在网络中消逝。

原来如此,解释一下,上个图:

技术图片

  1. 如果服务器最后发送的ACK因为某种原因丢失了,那么客户一定会重新发送FIN,这样因为有TIME_WAIT的存在,服务器会重新发送ACK给客户,如果没有TIME_WAIT,那么无论客户有没有收到ACK,服务器都已经关掉连接了,此时客户重新发送FIN,服务器将不会发送ACK,而是RST,从而使客户端报错。也就是说,TIME_WAIT有助于可靠地实现TCP全双工连接的终止。

  2. 如果没有TIME_WAIT,我们可以在最后一个ACK还未到达客户的时候,就建立一个新的连接。那么此时,如果客户收到了这个ACK的话,就乱套了,必须保证这个ACK完全死掉之后,才能建立新的连接。也就是说,TIME_WAIT允许老的重复分节在网络中消逝。

回到我们的问题,由于我并不是正常地经过四次断开的方式中断连接,所以并不会存在最后一个ACK的问题。所以,这样是安全的。不过,最终的服务器版本,还是不要设置为端口可复用的。切记。

 

以上是关于网页LED——基于http的主要内容,如果未能解决你的问题,请参考以下文章

[国嵌攻略][174][CGI快速入门-网页控制LED]

比较有用的php代码片段

linux驱动platform驱动模型详解,以及基于platform驱动模型的led驱动

如何在 Reactjs 中添加丰富的代码片段?

不写一行代码:实现安卓基于PWM的LED设备驱动

HTML代码片段