终止网络连接的通常方法是调用close函数。不过close有两个限制,却可以使用shutdown来避免。

close 把描述字的引用计数减1,仅在该计数变为0时才关闭套接口。使用shutdown可以不管引用计数就激发TCP的正常连接终止序列(由FIN开始的四个分节).

close 终止数据传送的两个方向:读和写。既然TCP连接是全双工的,有时候我们需要告知对端我们已经完成了数据发送,即使对端仍有数据要发送给我们。下图展示了这样的情况下典型的函数调用。

#include <sys/socket.h>
int shutdown(int sockfd, int howto);
返回:0——成功,-1——出错

该函数的行为依赖于howto参数的值:

SHUT_RD 关闭连接的读这一半——套接口中不再有数据可接收,而且套接口接收缓冲区中的现有数据都被丢弃。进程不能再对这样的套接口调用任何读函数。对一个TCP套接口这样调用shutdown函数后,由该套接口接收的来自对端的任何数据都被确认,然后悄然丢弃。

SHUT_WR 关闭连接的写这一半——对于TCP套接口,这称为半关闭(half-close)。当前留在套接口发送缓冲区中的数据将被发送掉,后跟TCP的正常连接终止序列。不管套接口描述字的引用计数是否等于0,这样的写这一半关闭照样执行。进程不能再对这样的套接口调用任何写函数。

SHUT_RDWR 连接的读这一半和写这一半都关闭——这与调用shutdown两次等效:第一次调用指定SHUT_RD,第二次调用指定SHUT_WR。

这三个SHUT_xxx名字由POSIX规范定义。howto参数的典型值将会是0(关闭读这一半)、1(关闭写这一半)和2(读这一半和写这一半都关闭)。

UNIX网络编程读书笔记:shutdown函数的更多相关文章

  1. UNIX网络编程--读书笔记

    会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要 ...

  2. UNIX网络编程读书笔记:简介

    认知套接口编程接口 理解原始套接口(raw socket)的概念   值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分. 上图中在TCP和UDP之间留有间隙 ...

  3. Unix 网络编程 读书笔记1

    第一章: C/C++语言提供两种不同的编程模式:IPL32和PL64.► IPL32 ● 表示integer/pointer/long三种数据类型是32位(4个字节),在这种模式下,提供32位的地址空 ...

  4. UNIX网络编程读书笔记:原始套接口

    概述 应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket).http://www.cnblogs.com/nufangrensheng/p/3583435.ht ...

  5. UNIX网络编程读书笔记:套接口选项

    概述 有很多方法来获取和设置影响套接口的选项: getsockopt和setsockopt函数 fcntl函数 ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接口. ...

  6. UNIX网络编程读书笔记:名字与地址转换

    概述 在名字和数值地址间进行转换的函数: gethostbyname和gethostbyaddr:在主机名字与IPv4地址之间进行转换.仅仅支持IPv4. getservbyname和getservb ...

  7. UNIX网络编程读书笔记:select函数

    select函数概况: select函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或多个事件发生或经历一段指定的时间后才唤醒它. 作为一个例子,我们可以调用select,告知内核仅在下 ...

  8. UNIX网络编程读书笔记:地址操纵函数

    地址格式转换函数:它们在ASCII字符串(人们比较喜欢用的格式)与网络字节序的二进制值(此值存于套接口地址结构中)间转换地址. 1.inet_aton.inet_addr.inet_ntoa inet ...

  9. UNIX网络编程读书笔记:recvmsg和sendmsg函数

    这两个函数是最通用的I/O函数.实际上我们可以把所有read.readv.recv和recvfrom调用替换成recvmsg调用.类似地,各种输出函数调用也可以替换成sendmsg调用. #inclu ...

随机推荐

  1. 【BZOJ 3812】 3812: 主旋律 (容斥原理**)

    3812: 主旋律 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 235  Solved: 196 Description 响应主旋律的号召,大家决定 ...

  2. [ZROI 9.15模拟赛] Tutorial

    Link: 传送门 可能要补一补之前的题了 题目名字天(Sky)的(De)炭(C)好评啊…… A: 从买/卖物品的配对来考虑: 可以发现如果当前物品为卖,肯定从之前选最小的(无论其为买/卖),因为贡献 ...

  3. Spring 注解大全与详解

    Spring使用的注解大全和解释 注解 解释 @Controller 组合注解(组合了@Component注解),应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类 ...

  4. iOS 反反注入 修改__RESTRICT,__restrict工具

    通过在 Xcode 里的 Other Linker Flags 设置参数,可以防止App被注入dylib(仅限于iOS 10 以下系统)  比如,某艺,XX音乐等 dylib无法注入,也就意味着没办法 ...

  5. mui中a标签的跳转问题

    一.脑补 快速响应是mobile App实现的重中之重,研究表明,当延迟超过100毫秒,用户就能感受到界面的卡顿,然而手机浏览器的click点击存在300毫秒延迟(至于为何会延迟,及300毫秒的来龙去 ...

  6. Linear regulator=low-cost dc/dc converter

    The circuit in Figure 1 is a good choice if you need a power supply with high efficiency and you don ...

  7. Two-transistor circuit replaces IC

    Linear Technology's recently introduced LTC4300 chip buffers I2C clock and data lines to and from a ...

  8. API & HTTP 请求调试:Postman

    参考: Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试. 它能够发送任何类型的HTTP requests (GET, HEAD, POST, PU ...

  9. C#各种结束进程的方法详细介绍

    Process类的CloseMainWindow, Kill, Close Process.CloseMainWindow是GUI程序的最友好结束方式,从名字上就可以看出来它是通过结束主窗体,相当于用 ...

  10. 离线下载安装flash player

    针对IE: 一般flash player的安装方法都是在线安装的方式.由于网络的问题经常容易失败,可以通过离线方法进行下载: 访问 http://helpx.adobe.com/flash-playe ...