8.1 I/O缓冲大小
SO_RCVBUF是输入缓冲大小相关可选项,SO_SNDBUF是输出缓冲大小相关可选项。用这2个可选项既可以读取当前
I/O缓冲大小,也可以进行更改。
系统不会100%按照我们的请求设置缓冲大小,因为要实现流控制和错误发生时的重传机制,至少要有一些缓冲空
间吧?
8.2 SO_REUSEADDR选项
SO_REUSEADDR选项及其Time-wait状态很重要。
在服务器端控制台输入CTRL+C强制关闭服务器端,如果用同一端口号重新运行服务器端,将输出binderror消息,
大约3分钟后可重新运行服务器端。
为什么会有Time-wait状态?
在断开连接的四次握手中,考虑到主机A发送的最后一个ACK消息在传递途中可能丢失,如果主机A完全终止,主机
B将永远无法收到主机A最后传来的ACK消息。
因此,先传输FIN消息的主机应经过Time-wait过程。
服务器发生故障时需要尽快重启以提供服务,但因Time-wait状态而必须等几分钟。
解决方案:调整SO_REUSEADDR参数,可将Time-wait状态下的套接字端口号重新分配给新的套接字。
8.3 TCP_NODELAY
只有收到前以数据的ACK消息时,Nagle算法才发送下一数据。
TCP套接字默认使用Nagle算法交换数据,因此最大限度的进行缓冲,直到受到ACK。
即使只传1个字节的数据,其头信息都有可能是几十个字节。因此,为了提高网络传输效率,必须使用Nagle算法。
八 套接字的多种可选项
最新推荐文章于 2021-10-28 23:20:17 发布