网站存储空间大小,旅游营销推广方式,永川区做网站,外网网站管理制度建设背景#xff1a;我们要讲述的是网络编程中常用的两个API#xff1a; #include unistd.h int close(int fd); #include sys/socket.h int shutdown(int sockfd, int how); 以及TCP的半连接#xff0c;半打开。 shutdown函数的行为依赖第二个参数区分#xf…背景我们要讲述的是网络编程中常用的两个API #include unistd.h int close(int fd); #include sys/socket.h int shutdown(int sockfd, int how); 以及TCP的半连接半打开。 shutdown函数的行为依赖第二个参数区分
SHUT_RD reception接受的disallow拒绝也就是第一个参数的文件描述符的接受数据被阻止。 SHUT_WR transmissions传播发送的disallow也就是发送被阻止。 SHUT_RDWR 兼而有之。 具体实现都是从内核层面执行。
close是关闭掉对应的文件描述符并释放与描述符相关的资源收不了也接不了。
注意shutdown并不会关闭掉对应的文件描述符并释放与描述符相关的资源只是对于功能进行内核层面阻止。 也就是说shutdown() 提供了更细粒度你可以关闭部分或者全关闭的控制而 close() 完全关闭套接字并释放资源。前者允许你在不关闭套接字的情况下停止某个方向的数据传输。例如你可以通过 SHUT_WR 选项来从内核层面停止该sockfd的发送数据能力但仍然允许接收数据。即即shutdown() 适用于在应用层控制连接的关闭行为时使用。 另外如果还需要深入理解close and shutdown详见https://stackoverflow.com/questions/4160347/close-vs-shutdown-socket/23483487#23483487 TCP 的半连接是指在 TCP 三次握手过程中发生的一种状态。当主机 A 向主机 B 发起连接请求时B 响应了这个请求但 A 并没有完成第三次握手这种情况被称为半连接。
与此相关的概念是半连接攻击也称为 SYN 攻击。在这种攻击中攻击者不断发送连接请求但不完成后续的握手过程导致主机 B 分配的内存资源被长期占用最终可能导致资源耗尽。 TCP的半打开
半打开两方建立TCP连接然后一方关闭而另一方并不知情这样的连接称之为半打开连接。处于半打开的连接如果双方不进行数据通信确实发现不了问题仍处于连接状态的一方不会检测另外一方已经出现异常。怎么解决 心跳机制具体使用定时器实现比如让服务器每隔一段时间发送报文请求回复。当主机收到这个包后因为本地应用程序已经关闭了它的套接字所以主机此时会给服务端回复一个RST包报文中没有负载且TCP头部标志中的RST位被设置的一个数据包。