Каков второй параметр TCPSocket.send в Ruby? - PullRequest
2 голосов
/ 18 июля 2009

Я использую эту строку для отправки сообщения через сокет Ruby (1.8.7):

@@socket.send login_message, 0

(это прекрасно работает)

Зачем нужен второй параметр? Я не могу найти метод отправки в документации по Ruby API ...

Сначала я подумал, что это была некоторая длина сообщения в стиле C. Вот почему я использовал login_message.length в качестве второго параметра. Это сработало, но я столкнулся со странным поведением:

Все отлично работает, когда вторым параметром является нечетное число. Если это четное число, последний символ теряется при получении на другой стороне (другая сторона - это программа C ++ с сокетом C). Я проверил сетевой трафик с помощью Wireshark и заметил, что пакеты выглядят хорошо. Все данные полны. Почему последний символ теряется, когда я его получаю?

Спасибо Леннарт

1 Ответ

4 голосов
/ 18 июля 2009

Это параметр flags, аналогичный последнему параметру системного вызова send(). Обычно это должно быть 0, но может быть что-то вроде Socket::MSG_OOB (для отправки внеполосных данных). Для Ruby 1.9 это задокументировано в BasicSocket .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...