Где опции MESSAGE_ определяются для рубиновых сокетов?

C/C++ легок.

union ufloat {
  float f;
  unsigned u;
};

ufloat u1;
u1.f = 0.3f;

Тогда Вы просто производите u1.u. Можно адаптироваться эта реализация .

Удваивается столь же легкий.

union udouble {
  double d;
  unsigned long u;
}

, потому что удваивается, 64 бита.

Java немного легче: используйте Float.floatToRawIntBits () объединенный с Integer.toBinaryString () и Double.doubleToRawLongBits, объединенный с Long.toBinaryString () .

9
задан Superpolock 6 October 2009 в 20:21
поделиться

2 ответа

Они имеют те же имена, что и соответствующие #define в стеке сокетов C BSD, за исключением Socket :: впереди. (И для записи, чтобы точно ответить на ваш вопрос, я должен сказать ext / socket / socket.c " в дереве исходного кода Ruby.) Итак:

>> require 'socket'
=> true
>> Socket::MSG_PEEK
=> 2

Вероятно, вы можете увидеть это, набрав man 2 recv , хотя вам может потребоваться сначала установить пакет страниц руководства. Есть также онлайн-справочные страницы, см., Возможно,: man 2 recv здесь .

А пока вот то, что вам нужно, это параметры Posix, взятые из справочной страницы NetBSD . В Linux доступно гораздо больше. При работе в Linux Ruby определяет дополнительные символы, в противном случае они могут быть неопределенными в зависимости от хоста. (Спасибо, mark4o .)

 The flags argument to a recv call is formed by or'ing one or more of the
 values:

       MSG_OOB        process out-of-band data
       MSG_PEEK       peek at incoming message
       MSG_WAITALL    wait for full request or error

 The MSG_OOB flag requests receipt of out-of-band data that would not be
 received in the normal data stream.  Some protocols place expedited data
 at the head of the normal data queue, and thus this flag cannot be used
 with such protocols.  The MSG_PEEK flag causes the receive operation to
 return data from the beginning of the receive queue without removing that
 data from the queue.  Thus, a subsequent receive call will return the
 same data.  The MSG_WAITALL flag requests that the operation block until
 the full request is satisfied.  However, the call may still return less
 data than requested if a signal is caught, an error or disconnect occurs,
 or the next data to be received is of a different type than that
 returned.
7
ответ дан 4 December 2019 в 23:06
поделиться

Пару месяцев назад я застрял в этой штуке. Во-первых, вы используете класс Socket, верно? Потому что это то, что я использовал.

Я не знаю наверняка, но это зависит от протокола, который вы создаете с помощью класса Socket.

Например, если вы создаете сокет как сокет TCP:

sock = Socket.open(Socket::PF_INET, Socket::SOCK_RAW, Socket::IPPROTO_RAW)

флаги будут шестью флагами протокола TCP (URG, ACK, PSH и т. Д.).

Я не уверен в этом, но 0 у меня работает отлично.

0
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: