`
iunknown
  • 浏览: 403996 次
社区版块
存档分类
最新评论

TCP套接口的缓冲区

阅读更多
《unix网络编程》 Page42
每一个 TCP 套接口有一个发送缓冲区,我们可以用 SO_SNDBUF 套接口选项来改变这一缓冲区的大小。当应用进程调用 write 时,内核从应用进程的缓冲区中 copy 所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠)。这里假设套接口是阻塞的,这是通常的缺省设置。

Page161
客户可以设置 SO_LINGER 套接口选项,指定一个正的延滞时间。这种情况下,客户的 close 要直到它的数据和 FIN 已被 TCP 服务器确认后才返回。但我们仍有问题:在服务器应用进程读剩余数据之前,服务器主机可能崩溃,并且客户应用进程永远不会知道。
这里有一个基本原则:设置 SO_LINGER 套接口选项后,close 的成功返回仅告诉我们发送的数据(和 FIN)已由对方 TCP 确认,它并不能告诉我们对方应用进程是否已读了数据。如果不设置该选项,我们连对方 TCP 是否确认了数据都不知道。
让客户直到服务器已读取其数据的一个方法是:调用 shutdown (第二个参数设置为 SHUTWR )而不是调用 close,并等待对方 close 连接的本地(服务器)端。

Page162
获知对方应用进程已读我们的数据的另外一个方法是:使用一个应用级的确认(application-level acknowledge) 即应用 ACK (application ACK)。例如,客户端给服务器发数据后,调用 read 来读 1 个字节的数据。

Page338
对于一个非阻塞 TCP 套接口,如果在套接口的发送缓冲区中没有空间,输出操作会立即返回一个 EWOULDBLOCK 错误。如果发送缓冲区中有一些空间,返回值为内核能向缓冲区 copy 的字节数。(这叫做不足计数(short count)。)
分享到:
评论

相关推荐

    TCPIP高效编程:改善网络程序的44个技巧 PDF中文版带书签-目录

    3.18 技巧32:理解缓冲区长度带来的影响 195 第4章 工具和资源 199 4.1 技巧33:熟悉ping实用工具 199 4.2 技巧34:学习使用tcpdump或类似的工具 201 4.2.1 tcpdump是如何工作的 202 4.2.2 使用tcpdump 205 ...

    网络故障排查指南以及部分工具

    (3)、环形缓冲区 3、协议栈 (1)、邻居子系统,arp (2)、ip层,地址,路由,防火墙,分片,mtu (3)、tcp:time外套,队列,syn攻击,超时,乱序,内存不足 (4)、UDP (5)、socket设置 分析工具: (1)、...

    winsock带注册文件

    Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的网络通信应用程序接口之一。20世纪90年代初,由Sun Microsystems,...

    深入分析Linux内核源码

    12.4.5 套接字缓冲区的上层支持例程 12.5 网络设备接口 12.5.1 基本结构 12.5.2 命名规则 12.5.3 设备注册 12.5.4 网络设备数据结构 12.5.5 支持函数 第十三章 启动系统 13.1 初始化流程 13.1.1 系统加...

    FreeBSD操作系统设计与实现

    2.6.4 套接口IPC 2.6.5 分散/聚集I/O 2.6.6 多文件系统支持 2.7 设备 2.8 文件系统 2.9 网络文件系统 2.10 终端 2.11 进程间通信 2.12 网络通信 2.13 网络实现 2.14 系统运行 2.15 复习题 2.16 参考文献 第3章 ...

    Linux编程--Linux内核

    8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107 9.1.2 任务...

    LINUX编程白皮书

    8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107 9.1.2 任务...

    具有C ++ 11的跨平台网络库-C/C++开发

    请参阅中文。请参见中文。Wiki简介CppNet是一种proactor模式和多线程...客户端只有一种附加的缓冲区对象类型。 快速:使用epoll和IOCP,其中epoll多线程线程由Linux内核通过端口重用进行处理。 每个插槽都有一个记忆

    windows下iperf 2.0.4

    设置套接字缓冲区为指定大小。对于TCP方式,此设置为TCP窗口大小。对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。 -B, --bind host $IPERF_BIND 绑定到主机的多个地址中的一个。...

    srpc:适用于C#流的ProtoBuf RPC

    这可用于直接通过TCP套接字或名称管道调用rpc原型服务。 入门 这会将sRPC添加到您的项目中,因此您可以使用此协议从.proto文件创建RPC接口。 先决条件 该软件包包括用于的最新Windows,Linux和MacOSX构建。 在某些...

    CppNet:具有C ++ 11的跨平台网络库

    客户端只有一种附加的缓冲区对象类型。 快速:使用epoll和IOCP,其中epoll多线程线程由Linux内核通过端口重用进行处理。 每个套接字都有一个内存池对象。 从内存池请求的所有内存都由智能指针管理。 清除:三层:...

    Visual C#网络编程技术与实践源代码

     2.2.2 数据缓冲区处理方法  2.3 TCP无保护消息边界  2.3.1 发送固定长度的消息  2.3.2 采用变长的消息  2.3.3 使用特殊标记处理消息  2.4 本章小结 第3章 开发基于TCP协议的应用程序  3.1 套接字与...

    Java CP/IP Socket编程

    1. 使用定长的写缓冲区改写TCPEchoClientNonblocking.java。..........149 2.使用Buffer和DatagramChannel编写一个回显客户端。..........149 第6章深入剖析..........149 6.1 缓冲和TCP..........152 6.2 死锁...

    Linux内核 内容很全

    网络 92 8.1 TCP/IP网络概述 92 8.2 Linux中的TCP/IP网络层次结构 95 8.3 BSD套接字接口 96 8.4 INET的套接字层 97 8.4.1 创建BSD套接字 98 8.4.2 为INET BSD Socket绑定地址 99 8.4.3 建立...

    zsocket:Golang中用于Linux的零拷贝套接字

    ZSocket ZSocket是一个包装Linux零复制套接字syscall的库,用于在内存映射文件中创建环形缓冲区。 它还包含一些实用程序功能和类型,以帮助一些第2层,第3层和第4层类型。 它与libcap非常相似,除了它易于理解的用于...

    Linux编程从入门到精通

    8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107 9.1.2 任务...

    Linux编程白皮书

    8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107 9.1.2 任务...

    LINUX编程白皮书 (全集)

    8.5.1 套接字缓冲区 100 8.5.2 接收IP报文 101 8.5.3 发送IP报文 102 8.5.4 数据分片 102 8.6 地址解析协议 103 8.7 IP路由 104 第9章 内核机制与模块 107 9.1 内核机制 107 9.1.1 Bottom Half控制 107 9.1.2 任务...

    Windows网络编程

    45210.2.2 错误处理 45210.2.3 缓冲区参数 45210.2.4 异步I/O 45210.3 Internet函数 45310.3.1 常用Internet函数 45310.3.2 FTP客户端函数 45910.3.3 HTTP客户端函数 46110.3.4 Gopher客户端函数 46510.4 ...

Global site tag (gtag.js) - Google Analytics