zeromq.*: make the size of the zmq_msg_t buffer vary depending on library version
This could fix the mac 32bit failure. It maybe happened because the buffer was too small and data was overwritten.char-rename
parent
0e7fd0340d
commit
0f989321b7
|
@ -71,22 +71,19 @@ FUNCTION: int zmq_term ( void* context )
|
|||
! 0MQ message definition.
|
||||
!
|
||||
|
||||
STRUCT: zmq_msg_t
|
||||
{ data uchar[32] } ;
|
||||
|
||||
FUNCTION: int zmq_msg_init ( zmq_msg_t* msg )
|
||||
FUNCTION: int zmq_msg_init_size ( zmq_msg_t* msg, size_t size )
|
||||
FUNCTION: int zmq_msg_init_data ( zmq_msg_t* msg, void* data, size_t size, void* ffn, void* hint )
|
||||
FUNCTION: int zmq_msg_send ( zmq_msg_t* msg, void* s, int flags )
|
||||
FUNCTION: int zmq_msg_recv ( zmq_msg_t* msg, void* s, int flags )
|
||||
FUNCTION: int zmq_msg_close ( zmq_msg_t* msg )
|
||||
FUNCTION: int zmq_msg_move ( zmq_msg_t* dest, zmq_msg_t* src )
|
||||
FUNCTION: int zmq_msg_copy ( zmq_msg_t* dest, zmq_msg_t* src )
|
||||
FUNCTION: void* zmq_msg_data ( zmq_msg_t* msg )
|
||||
FUNCTION: size_t zmq_msg_size ( zmq_msg_t* msg )
|
||||
FUNCTION: int zmq_msg_more ( zmq_msg_t* msg )
|
||||
FUNCTION: int zmq_msg_get ( zmq_msg_t* msg, int option )
|
||||
FUNCTION: int zmq_msg_set ( zmq_msg_t* msg, int option, int optval )
|
||||
FUNCTION: int zmq_msg_init ( void* msg )
|
||||
FUNCTION: int zmq_msg_init_size ( void* msg, size_t size )
|
||||
FUNCTION: int zmq_msg_init_data ( void* msg, void* data, size_t size, void* ffn, void* hint )
|
||||
FUNCTION: int zmq_msg_send ( void* msg, void* s, int flags )
|
||||
FUNCTION: int zmq_msg_recv ( void* msg, void* s, int flags )
|
||||
FUNCTION: int zmq_msg_close ( void* msg )
|
||||
FUNCTION: int zmq_msg_move ( void* dest, void* src )
|
||||
FUNCTION: int zmq_msg_copy ( void* dest, void* src )
|
||||
FUNCTION: void* zmq_msg_data ( void* msg )
|
||||
FUNCTION: size_t zmq_msg_size ( void* msg )
|
||||
FUNCTION: int zmq_msg_more ( void* msg )
|
||||
FUNCTION: int zmq_msg_get ( void* msg, int option )
|
||||
FUNCTION: int zmq_msg_set ( void* msg, int option, int optval )
|
||||
|
||||
!
|
||||
! 0MQ socket definition.
|
||||
|
@ -200,8 +197,8 @@ FUNCTION: int zmq_send ( void* s, void* buf, size_t len, int flags )
|
|||
FUNCTION: int zmq_recv ( void* s, void* buf, size_t len, int flags )
|
||||
FUNCTION: int zmq_socket_monitor ( void* s, c-string addr, int events )
|
||||
|
||||
FUNCTION: int zmq_sendmsg ( void* s, zmq_msg_t* msg, int flags )
|
||||
FUNCTION: int zmq_recvmsg ( void* s, zmq_msg_t* msg, int flags )
|
||||
FUNCTION: int zmq_sendmsg ( void* s, void* msg, int flags )
|
||||
FUNCTION: int zmq_recvmsg ( void* s, void* msg, int flags )
|
||||
|
||||
! Experimental
|
||||
FUNCTION: int zmq_sendiov ( void* s, void* iov, size_t count, int flags )
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
! Copyright (C) 2011-2013 Eungju PARK, John Benediktsson.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: destructors tools.test zeromq ;
|
||||
USING: destructors sequences tools.test zeromq ;
|
||||
IN: zeromq.tests
|
||||
|
||||
{ t } [
|
||||
zmq-msg-size { 32 48 64 } member?
|
||||
] unit-test
|
||||
|
||||
|
||||
{ B{ 0 1 10 33 244 255 } } [
|
||||
B{ 0 1 10 33 244 255 } byte-array>zmq-message
|
||||
[ zmq-message>byte-array ] with-disposal
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
! Copyright (C) 2011-2013 Eungju PARK, John Benediktsson.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
|
||||
USING: accessors alien.c-types alien.data arrays byte-arrays
|
||||
classes.struct combinators continuations destructors fry io
|
||||
kernel libc math namespaces sequences zeromq.ffi ;
|
||||
classes.struct combinators destructors fry kernel libc math math.order
|
||||
memoize sequences zeromq.ffi ;
|
||||
|
||||
IN: zeromq
|
||||
|
||||
|
@ -18,13 +17,30 @@ TUPLE: zmq-error n string ;
|
|||
: zmq-version ( -- version )
|
||||
{ int int int } [ zmq_version ] with-out-parameters 3array ;
|
||||
|
||||
: zmq-version-numeric ( -- n )
|
||||
zmq-version first3 [ 100 * ] [ 10 * ] [ 1 * ] tri* + + ;
|
||||
|
||||
! See
|
||||
! https://github.com/chuckremes/ffi-rzmq-core/blob/master/lib/ffi-rzmq-core/structures.rb
|
||||
MEMO: zmq-msg-size ( -- x )
|
||||
zmq-version-numeric 410 <=> {
|
||||
{ +lt+ [ 32 ] }
|
||||
{ +eq+ [ 48 ] }
|
||||
{ +gt+ [ 64 ] }
|
||||
} case ;
|
||||
|
||||
! This word should be used to allocate the zmq_msg_t struct because
|
||||
! the size of it varies between versions.
|
||||
: <zmq_msg_t> ( -- byte-array )
|
||||
zmq-msg-size (byte-array) ;
|
||||
|
||||
GENERIC# zmq-setopt 2 ( obj name value -- )
|
||||
GENERIC# zmq-getopt 1 ( obj name -- value )
|
||||
|
||||
TUPLE: zmq-message underlying ;
|
||||
|
||||
: <zmq-message> ( -- msg )
|
||||
zmq_msg_t <struct>
|
||||
<zmq_msg_t>
|
||||
[ zmq_msg_init check-zmq-error ]
|
||||
[ zmq-message boa ] bi ;
|
||||
|
||||
|
@ -32,7 +48,7 @@ M: zmq-message dispose
|
|||
underlying>> zmq_msg_close check-zmq-error ;
|
||||
|
||||
: byte-array>zmq-message ( byte-array -- msg )
|
||||
zmq_msg_t <struct>
|
||||
<zmq_msg_t>
|
||||
[ over length zmq_msg_init_size check-zmq-error ]
|
||||
[ zmq_msg_data swap dup length memcpy ]
|
||||
[ zmq-message boa ] tri ;
|
||||
|
|
Loading…
Reference in New Issue