2009-07-18 6 views
2

J'utilise cette ligne pour envoyer un message via un Ruby (1.8.7) prise:Quel est le deuxième paramètre de TCPSocket.send dans Ruby?

@@socket.send login_message, 0 

(Cela fonctionne bien)

Quel est le second paramètre pour? Je ne trouve pas la méthode d'envoi dans les docs API Ruby ...

J'ai d'abord pensé que c'était une certaine longueur de style C du message. C'est pourquoi j'ai utilisé login_message.length comme deuxième paramètre. Cela a fonctionné mais j'ai rencontré un comportement étrange:

Tout fonctionne bien quand le deuxième paramètre est un nombre impair. Si c'est un nombre pair, le dernier caractère est perdu lors de la réception de l'autre côté (L'autre côté est un programme C++ avec un socket C). J'ai inspecté le trafic réseau avec Wireshark et j'ai remarqué que les paquets semblaient bien. Toutes les données sont complètes. Pourquoi le dernier caractère est-il perdu quand je le reçois?

Merci Lennart

Répondre

4

Ceci est le paramètre flags, le même que le dernier paramètre à l'appel système send(). Normalement, il devrait être 0, mais peut être quelque chose comme Socket::MSG_OOB (pour envoyer des données hors bande). Pour Ruby 1.9, ceci est documenté sous BasicSocket.

+0

Merci beaucoup! :) –

Questions connexes