Quando a bandeira de push é definida no segmento TCP
-
20-09-2019 - |
Pergunta
Eu fiz esta pergunta anterior aqui:
TCP dois lados tentando se conectar simultaneamente
Eu tentei o método fornecido na solução e, enquanto enviava enquanto usava o NetCat e os pacotes de fungamento com etéreo, observei que, quando enviei uma string "Hello" de um lado para o outro, ele foi enviado em um segmento com o sinalizador de push.
Quem decide definir a bandeira push? Quais são as regras para definir o sinalizador push ou urgente em um segmento TCP? É possível fazer isso usando a API de soquetes?
Solução
A bandeira de push é usada pela pilha TCP para dizer basicamente "estou pronto para agora". Está apenas indicando que o segmento de dados é totalmente transmitido pela fonte.
Não há como indicá -lo ou controlá -lo no Userland (sua API de soquete), pois essa é apenas a pilha/implementação do TCP para fazê -lo. Como a bandeira urgente.
(Fonte: Richard Stevens - TCP/IP ilustrado vol 1, capítulo 20)
Outras dicas
Você pode definir a bandeira urgente usando send()
com o MSG_OOB
Conjunto de bandeira. Como isso implica, os dados enviados estarão fora da banda, o que significa que normalmente não serão recebidos pelo lado de chamada simplesmente chamando read()
. O lado receptor receberá alguma indicação de dados de OOB, como o sinal SIGURG
, ou o soquete se tornará excepcional e pode ser verificado como tal usando select()
.
Na maioria das vezes, você não deseja definir a bandeira urgente.