接收窗口大小

在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博客

Windows下TCP套接字的一些细枝末节问题相关推荐

  1. TCP/IP网络编程---Linux系统下的TCP套接字编程

    目录 第一章 理解网络编程和套接字 1.1 网络编程和套接字概要 1.2 基于Linux的文件操作 1.2.1 底层文件访问和文件描述符 1.2.2 打开文件 1.2.3 关闭文件 1.2.4 将数据 ...

  2. Linux下套接字详解(四)----简单的TCP套接字应用(迭代型)

    前面我们已经将了TCP/UDP的基本知识,还说了并发服务器与迭代服务器的区别,我们大致了解大多数TCP服务器是并发的,大多数UDP服务器是迭代的 ,即我们在进行数据传送的时候,往往使用服务器与客户但之 ...

  3. 第2章 基本的TCP套接字

    2.1 IPv4 TCP客户端     4个步骤: (1) socket()创建TCP套接字(window下要用初始化套接字环境) (2) connect()建立到达服务起的连接 (3) send() ...

  4. Python之路(第三十一篇) 网络编程:简单的tcp套接字通信、粘包现象

    一.简单的tcp套接字通信 套接字通信的一般流程 服务端 server = socket() #创建服务器套接字server.bind() #把地址绑定到套接字,网络地址加端口server.liste ...

  5. 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(下)——套接字

    1.套接字概述 套接字是网络通信的基石,是网络通信的基本构件. 所谓套接字,实际上是一个指向传输提供者的句柄.在WinSock中,就是通过操作该句柄来实现网络通信和管理的.根据性质和作用不同,套接字可 ...

  6. (十三) 深入浅出TCPIP之TCP套接字参数

    专栏其他文章: 理论篇: (一)深入浅出TCPIP之理解TCP报文格式和交互流程 (二)深入浅出TCPIP之再识TCP,理解TCP三次握手(上) (三)深入浅出TCPIP之再识TCP,理解TCP四次挥 ...

  7. TCP套接字编程详解

    目录 为什么socket编程又叫套接字编程? TCP服务端 初始化套接字库--WSAStarup 创建套接字--socket 绑定到本机 --bind 开始监听 --listen 连接客户端请求--a ...

  8. Windows下TCP编程——服务器客户端代码以及爬虫示例

    1 TCP服务器和客户端代码 前面的TCP详解已经详细的介绍了TCP服务器和客户端的工作流程,接下来就直接上代码: server.cpp #include <stdio.h> #inclu ...

  9. 专题 15 TCP套接字编程

    概述 存在三种套接字:流式套接字(SOCK_STREAM).数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW). TCP套接字工作流程: 首先,服务器端启动进程,调用Socket创建 ...

最新文章

  1. 记一次shell脚本推后台stopped的问题
  2. php对象当参数传递 php深复制和浅复制
  3. (9)C#之ADO.NET 两个ListBox联动案例
  4. 特斯拉上海超级工厂开工 预计今夏完成初期建设...
  5. 分布式MySQL数据库TDSQL架构分析
  6. js实现向上滚动效果
  7. 开发、测试与QA的区别以及其他
  8. 蓝桥杯 java 组素数,2018 蓝桥杯省赛 B 组模拟赛(五) B 结果填空:素数个数
  9. springcloud工作笔记094---springcloud项目后端验证_hibernate validator后端校验字段_介绍了解
  10. 教你打通 Git 任督二脉
  11. 套用带标题行的表格样式_比格式刷好用10倍,原来Excel表格还有这么神奇的功能!...
  12. 计算机职称考试如何知道这道题对错,职称计算机考试Excel判断试题2017
  13. leach算法的实现过程_LEACH算法源代码
  14. linux系统的优点
  15. 摘录3:没有趋势,没有背驰。
  16. json转xml报[java.lang.NoClassDefFoundError: nu/xom/Serializer]
  17. linux下载大文件失败,Linux下FTP/SFTP传输大文件总是失败的处理办法
  18. flink增量读文本数据
  19. 计算机论文摘要要介绍技术吗,★计算机前沿技术论文摘要范文计算机前沿技术论文摘要写(7页)-原创力文档...
  20. 计算机二级excel排名,计算机二级excel真题:制作评选投票表格

热门文章

  1. 百度编辑器 UEditor 多图上传弹窗中去掉【在线管理】和【图片搜索】Tab页
  2. 利用MQL进行MQL解析
  3. vivado使用tcl脚本一键生成mcs文件
  4. 深度学习设备购置RTX 2080Ti + i7 9700k+ Z390 A主板
  5. 单招计算机专业考几科,高职单招一般都考什么科目
  6. Java贪吃蛇暂停怎么做_Java实现贪吃蛇游戏(1小时学会)
  7. 利用python制作小游戏
  8. End-to-End(端到端)的理解
  9. 统计一篇英语文章每个单词出现的频率
  10. 另一个jar包引不了_谁说我结不了婚,周晨宇比小哈更受欢迎,原因是这个