[rabbitmq-discuss] socket read timeout in rabbitmq-c

Scott Brooks scott at beamdog.com
Thu May 6 01:33:36 BST 2010

This may not solve your exact problem but it may help

You can pull the socket out of rabbitmq-c with
and then you can query

If amqp_data_in_buffer returns true, then the next read will return a
packet from inside it's internal buffer, and not check the network
If it returns false, select on the sockfd from amqp_get_sockfd to see
if there is data to be retrieved.

Only then call a possibly blocking function.


On Wed, May 5, 2010 at 5:35 PM, alex chen <chen650 at yahoo.com> wrote:
> Hi,
> We are using rabbitmq-c.  It seems to me most of the functions such as amqp_login and amqp_channel_open call amqp_simple_rpc, which sends the request and waits for response.  There seems to be no way to specify timeout value for waiting the response.  the amqp_socket.c::wait_frame_inner() calls read() and it may block forever if the response is net received.
> I am wondering if it can support specifying a time out (e.g. amqp_set_timeout(int timeout)), and add select(timeout) before the read() in wait_frame?  We found in several cases that amqp_channel_open hanged while doing read() in wait_frame_inner().  here is the stack trace:
> (gdb) where
> #0  0xffffe410 in __kernel_vsyscall ()
> #1  0xf7fbc69b in __read_nocancel () from /lib/tls/libpthread.so.0
> #2  0xf7fdf3e3 in wait_frame_inner (state=0x8053938, decoded_frame=0xf7732180) at amqp_socket.c:147
> #3  0xf7fdf64f in amqp_simple_rpc (state=0x8053938, channel=1, request_id=1310730, expected_reply_ids=0xf77321f8,
> decoded_request_method=0xf77321f0) at amqp_socket.c:251
> #4  0xf7fdff3b in amqp_channel_open (state=0x8053938, channel=1) at
> amqp_api.c:22
> thanks.
> -alex
> _______________________________________________
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
> http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss

More information about the rabbitmq-discuss mailing list