Roh*_*nga 6 tcp linux-kernel packet-sniffers
我在这里问过这个问题:
我尝试了解决方案中给出的方法,并在使用netcat和使用ethereal嗅探数据包时发送,我观察到,当我从一侧发送"hello"字符串到另一侧时,它是在设置了push标志的段中发送的.
谁决定设置推旗?在tcp段中设置push或urgent标志的规则是什么?是否可以使用套接字api来做到这一点?
您可以通过设置紧急标志send()与MSG_OOB标志设置.这意味着,发送的数据将是带外的,这意味着呼叫方通常不会简单地呼叫它read().接收方将获得一些OOB数据的指示,如信号SIGURG,或插座将变得异常,并可以使用这样检查select().
大多数情况下,您不想设置URGENT标志.
tcp堆栈使用PUSH标志基本上说"我现在已经完成了".它只是表明数据段是由源完全传输的.
无法在userland(您的套接字api)中指示或控制它,因为这只是tcp堆栈/实现.作为URGENT标志.
(来源:Richard Stevens - Tcp/ip插图第1卷,第20章)