记录一下socket中常见的TCP设置

本文介绍了TCP_DEFER_ACCEPT的功能及工作原理,该选项使服务器在接收到实际数据前不唤醒等待accept的进程,有助于减少不必要的上下文切换。此外,文章还讨论了其对于处理空连接攻击的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP_DEFER_ACCEPT
  只有当实际收到了数据,才唤醒正在 accept 的进程,可以减少一些无聊的上下文切换。
  同时有个超时时间 若time_out之内还没有收到数据,不会继续唤醒进程,而是直接丢弃连接。
例如: 
  设置TCP_DEFER_ACCEPT选项后,服务器受到一个CONNECT请求后,操作系统不会Accept,也不会创建IO句柄。
  操作系统应该在若干秒,(但肯定远远大于上面设置的1s) 后,会释放相关的链接。但没有同时关闭相应的端口,
  所以客户端会一直以为处于链接状态。如果Connect后面马上有后续的发送数据,那么服务器会调用Accept接收这个链接端口。
 
优点:
  这个端口设置对于CONNECT链接上来而又什么都不干的攻击方式处理很有效。我们原来的代码都是先允许链接,然后再进行超时处理,
  比他这个有点Out了。不过这个选项可能会导致定位某些问题麻烦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值