O que é o segundo parâmetro de TCP Socket.send em Ruby?
Pergunta
Eu estou usando esta linha para enviar uma mensagem através de uma tomada Ruby (1.8.7):
@@socket.send login_message, 0
(Esta multa funciona)
O que é o segundo parâmetro para? Não consigo encontrar o método de envio no rubi docs API ...
Primeiro pensei que era algum comprimento estilo C da mensagem. É por isso que eu usei login_message.length como segundo parâmetro. Isso funcionou, mas eu encontrei um comportamento estranho:
Tudo funciona bem quando o segundo parâmetro é um número ímpar. Se é um número par o último caractere se perde a receber do outro lado (O outro lado é um programa C ++ com um soquete C). I inspecionados o tráfego de rede com Wireshark e notou que os pacotes de boa aparência. Todos os dados estão completos. Por que é o último caractere perdido quando eu recebê-lo?
Obrigado Lennart
Solução
Este é o parâmetro bandeiras, o mesmo que o último parâmetro para a send()
chamada de sistema . Normalmente ele deve ser 0, mas pode ser algo como Socket::MSG_OOB
(para enviar out-of-band de dados). Para Ruby 1.9 isso está documentado sob BasicSocket .