Windows下TCP套接字的一些细枝末节问题

接收窗口大小

在TCP协议中,一方的接受窗口由另外一方指定。那么,我们如何通过SOCKET设置自己的窗口大小呢?答案是通过setsocketopt系统调用,该函数用于SOCKET的一些参数,其中之一就是设置接收窗口大小,一个经典的用法如下:

int RecvBuf = 0x800;
setsockopt(ListenSocket, SOL_SOCKET, SO_RCVBUF, (const char*)&RecvBuf, sizeof(int));

修改接收窗口需要注意以下几点:

  1. SOCKET在初始化时系统会设置一个默认的接收窗口,一般很大;
  2. 一旦双方的三次握手协商完成之后,接收窗口的值只能扩大,不能缩小;

OOB数据(紧急数据)

在Windows下的Socket中,有关OOB数据的行为表现如下:

  1. 当send函数的MSG_OOB位置1时,该次发送的数据为OOB数据,但无论本次发送的数据量有多大。只有最后一位位紧急数据;
  2. 当recv函数的MSG_OOB位置1时,如果缓冲区中存在紧急数据,则将这一BYTE的紧急数据优先读取,不论紧急数据之前有多少数据,同时将这一BYTE的数据丢出字节流;如果不存在紧急数据,表现行为根据阻塞或非阻塞来决定;
  3. 当recv函数的MSG_OOB位置0时,无论缓冲区有没有紧急数据,都当作没有紧急数据来处理;

关闭Nagle算法

可在setsockopt函数中设置TCP_NODENY选项来关闭Nagle算法

TIME_WAIT状态

在Windows上,服务器(即Listen)的套接字,无论是不是优雅关闭,都不会进入TIME_WAIT状态。

SHUTDOWN和CLOSESOCKET

关于SHUTDOWN合CLOSESOCKET可以看MSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值