终止网络连接的正常方法是close,但close有两个限制,可由shutdown来避免

1、close将描述字的访问计数减1,仅在此计数为0时才关闭套接口。用shutdown可以激发TCP的正常连接终止序列,而不管访问计数

2、close终止了数据传送的两个方向:读和写。由于TCP连接是全双工的,有很多时候我们要通知另一端我们已经完成了数据发送,即使那一端仍有许多数据要发送也是如此。

其函数如下:

#include <sys/socket.h>
int shutdown(int sockfd, int howto);

成功返回 0,失败返回-1

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

SHUT_RD:关闭连接的读这一半,不再接收套接口中的数据且现留在套接口接收缓冲区中的数据作废。进程不能再对套接口执行任何读函数。调用此函数后,由TCP套接口接收的任何数据都被确认,但数据本身扔掉

SHUT_WR:关闭连接的写一半,在TCP场合下,这称为半关闭。当前留在套接口发送缓冲区中的数据都被发送,后跟正常的TCP连接终止序列。这个写这一半的关闭不管套接口描述字的访问计数是否大于0的,进程不能再执行对套接口的任何写操作。

SHUT_RDWR:连接的读这一半和写这一半都关闭。这等效于调用 函数shutdown两次,第一次调用时SHUT_RD,第二次用SHUT_WR

网络编程学习笔记(shutdown函数)相关推荐

  1. 网络编程学习笔记(poll函数)

    其原型为: #include <poll.h> int poll(struct pollfd *fdarray, unsigned long nfds, int timeout); 成功时 ...

  2. 网络编程学习笔记(socketpair函数)

    socketpair函数建立一对相互连接的套接口,这个函数只对Unix域套接口适用,其定义如下: #include <sys/socket.h> int socketpair(int fa ...

  3. 网络编程学习笔记(getnameinfo函数)

    这个函数与getaddrinfo互补,它以一个套接口地址为参数,返回一个描述主机的字符串和一个描述服务的字符串.其函数原型如下: #include <netdb.h> int getnam ...

  4. 网络编程学习笔记(udp_client函数)

    创建一个未连接的UDP套接口的客户函数,其代码如下: #include <netdb.h> #include <sys/socket.h> #include <netin ...

  5. 网络编程学习笔记(getaddrinfo函数)

    函数getaddrinfo在库函数中隐藏了所有协议依赖性.应用 程序只需要处理由getaddrinfo填写的套接口地址结构.其函数原型为: #include <netdb.h> int g ...

  6. 网络编程学习笔记(uname函数)

    函数uname返回当前主机的名字.经常与gethostbyname一起用来确定本地主机的IP地址.其原型为: #include <sys/utsname.h> int uname(stru ...

  7. 网络编程学习笔记(gethostbyaddr函数)

    函数gethostbyaddr取一个二进制的IP地址并试图找到相应于此地址的主机名,与gethostbyname的行为恰好相反.gethostbyname感兴趣的是h_name 其原型为: #incl ...

  8. 网络编程学习笔记(gethostbyname2函数与IPv6支持)

    其原型为: #include <netdb.h> struct hostent * gethostbyname2(const char *hostname, int family); 成功 ...

  9. 网络编程学习笔记(gethostbyname函数)

    #include <netdb.h> struct hostent* gethostbyname(const char* hostname); 成功,返回非空指针,出错返回空指针,同时设置 ...

最新文章

  1. iOS 快速存储到本地
  2. c语言万年历设计背景,万年历设计报告
  3. 删除VS.NET起始页上项目名称的方法.
  4. 通过配置hosts.allow和hosts.deny文件允许或禁止ssh或telnet操作
  5. 开关怎么使用_智能数显压力开关怎么使用?
  6. PopupWindow 常用方法学习笔记
  7. (首个填坑)联想拯救者Y7000(自带win10 home) 安装Ubuntu16.04.6 + NVIDIA GTX1650驱动
  8. 怎样使用U盘启动盘安装乌班图系统
  9. 系统规划与管理师历年论文
  10. linux底层技术,Linux后端程序成长关键技术之底层体系结构
  11. 手把手教你查看常用理财工具
  12. 利用Python学习数据挖掘【2】
  13. oracle存储过程循环输入数据,oracle 存储过程循环插入数据
  14. HR在线揭秘:面试总被虐?这 12 个必问题请记好答案!
  15. 2021电赛国一——K题照度稳定可调LED台灯
  16. SuperMap GIS 9D(2019)产品白皮书_V2018Q4R1
  17. Java 正则表达式对数据脱敏处理
  18. 面向对象之关键字 this
  19. vue-cli构建的移动端项目ios9以下打开页面空白问题
  20. STemwin小工具应用

热门文章

  1. POJ 3620-Avoid The Lakes
  2. 下列关于python的描述正确的是-以下关于Python中模块的说法正确的是(_____)。...
  3. python飞机大战的实训心得体会-python之基础总结(飞机大战)
  4. python有相关的证书可以考吗-python的证书
  5. python界面图片-python实现读取并显示图片方法(不需要图形界面)
  6. python基础知识整理-Python3基础知识(一)
  7. python个人赚钱攻略-每个懂Python的人都必须知道的赚钱神器
  8. 查看python安装路径-在cmd中查看python的安装路径方法
  9. python有趣代码-盘点10个一行强大的、有趣的Python源代码
  10. python编程爱心-Python使用turtle库画一个爱心构成的爱心