我在这里问过这个问题:
tcp two sides trying to connect simultaneously
我尝试了解决方案中给出的方法,并在使用netcat和使用ethereal嗅探数据包时发送,我发现当我从一侧发送“hello”字符串到另一侧时,它是在一个带有push标志集的段中发送的
谁决定设置推旗? 在tcp段中设置push或urgent标志的规则是什么? 是否可以使用套接字api来完成它?
答案 0 :(得分:6)
tcp堆栈使用PUSH标志基本上说“我现在已经完成了”。它只是表明数据段是由源完全传输的。
无法在userland(您的套接字api)中指示或控制它,因为这只是tcp堆栈/实现。作为URGENT标志。
答案 1 :(得分:6)
您可以使用send()
设置MSG_OOB
标志来设置URGENT标志。这意味着,发送的数据将是带外的,这意味着呼叫方通常不会简单地呼叫read()
。接收方将获得OOB数据的一些指示,如信号SIGURG
,或者套接字将变为异常,并且可以使用select()
进行检查。
大多数时候你不想设置URGENT标志。