《TCP/IP网络编程》第7章 优雅地断开套接字连接

 

本章所有示例代码>>github

7.1 基于TCP的半关闭

1.       单方面断开连接带来的问题

    Linux的close函数(Windows的closesocket函数)意味着完全断开连接。完全断开连接不仅指无法传输数据,而且也不能接收数据。

    主机A发送完最后的数据,调用close函数断开了连接,之后主机A无法再接收主机B传输的数据。最终,由主机B传输的还未到达主机A的数据也销毁了。

    “只关闭一部分数据交换中使用的流”(Half-close)的方法应运而生。断开一部分连接是指,可以传输数据但无法接收数据,或可以接收数据但无法传输数据。

2.       套接字和流(Stream)

    把建立套接字后可交换数据的状态看作一种流。为了进行双向通信,需要I/O流1、I/O流2两个流。

    一旦两台主机间建立了套接字连接,每个主机就会拥有单独的输入流和输出流。本章讨论断开连接时,只断开其中1个流,而非同时断开两个流。

3.       针对优雅断开的shutdown函数

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

-sock:     需要断开的套接字文件描述符;

-howto:  传递断开方式信息;

              SHUT_RD:                断开输入流

              SHUT_WR:               断开输出流

              SHUT_RD_WR:         同时断开I/O流

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值