<P>hi all</P>
<P> zmq  I used is zeromq-4.0.4.tar.gz</P>
<P>I met a problem.  I have a server and client.</P>
<P> After close server I still use client send message, then I close client UI,  <SPAN id=__iebugfix__></SPAN>the client will hang. I call this ConditionA</P>
<P>gdb show the </P>
<P>#0  0x0000003e9c2d7e33 in poll () from /lib64/libc.so.6<BR>#1  0x00007ffff6720066 in zmq::signaler_t::wait (this=0x17dd928, timeout_=-1) at signaler.cpp:173<BR>#2  0x00007ffff671117e in zmq::mailbox_t::recv (this=0x17dd8c8, cmd_=0x7fffffffb830, timeout_=-1) at mailbox.cpp:72<BR>#3  0x00007ffff670886e in zmq::ctx_t::terminate (this=0x17dd830) at ctx.cpp:142<BR>#4  0x00007ffff67359a0 in zmq_ctx_term (ctx_=0x17dd830) at zmq.cpp:171<BR>#5  0x00007ffff7bb6f4d in zmq::context_t::close (this=0x1c7ab80) at /home/dev/TigerTeam/PAISetup/PAI/include/zmq/zmq.hpp:304<BR>#6  0x00007ffff7bb6f24 in zmq::context_t::~context_t (this=0x1c7ab80, __in_chrg=<value optimized out>) at /home/dev/TigerTeam/PAISetup/PAI/include/zmq/zmq.hpp:297<BR>#7  0x00007ffff7bb5785 in tiger::MessageCenter::~MessageCenter (this=0x7ffff7de67a0, __in_chrg=<value optimized out>) at MessageCenter.cpp:319<BR>#8  0x0000003e9c235fd2 in exit () from /lib64/libc.so.6<BR>#9  0x0000003e9c21ec64 in __libc_start_main () from /lib64/libc.so.6<BR>#10 0x0000000000405f49 in _start ()</P>
<P> </P>
<P>but if I not use client to send  message after close server, then i close client UI, the client can quit normally. I call this ConditionB</P>
<P> </P>
<P>And on the client, I use a thread to do send, like this</P>
<P> </P>
<P>while(quit ==false)</P>
<P>{</P>
<P>     send();</P>
<P>     while(quit == false)</P>
<P>     {</P>
<P>         poll(items, 1, 1000);</P>
<P>         if (items[0] & ZMQ_POLLIN)</P>
<P>         {</P>
<P>               recv();</P>
<P>        }   </P>
<P>     }</P>
<P>}</P>
<P> </P>
<P><BR>and I found something during debug</P>
<P> ConditionB on exit,  these breakpoints happen in order.</P>
<P>1.<BR>#0  zmq::object_t::send_reap (this=0x2478d50, socket_=0x2478d50) at object.cpp:303<BR>#1  0x00007ffb78eb6a46 in zmq::socket_base_t::close (this=<value optimized out>) at socket_base.cpp:837<BR>#2  0x00007ffb78ecb7f0 in zmq_close (s_=0x2478d50) at zmq.cpp:264<BR>#3  0x00007ffb7a34d085 in zmq::socket_t::close (this=0x24817c0) at /home/dev/TigerTeam/PAISetup/PAI/include/zmq/zmq.hpp:365<BR>#4  0x00007ffb7a3499e3 in tiger::BroadcastThread::~BroadcastThread (this=0x23e47c0, __in_chrg=<value optimized out>) at MessageCenter.cpp:108</P>
<P><BR>2.<BR>#0  zmq::object_t::send_stop (this=0x2478d50) at object.cpp:176<BR>#1  0x00007ffb78e9e821 in zmq::ctx_t::terminate (this=0x23a3020) at ctx.cpp:134<BR>#2  0x00007ffb78ecb9a0 in zmq_ctx_term (ctx_=0x23a3020) at zmq.cpp:171<BR>#3  0x00007ffb7a34cf4d in zmq::context_t::close (this=0x211df40) at /home/dev/TigerTeam/PAISetup/PAI/include/zmq/zmq.hpp:304<BR>#4  0x00007ffb7a34cf24 in zmq::context_t::~context_t (this=0x211df40, __in_chrg=<value optimized out>) at /home/dev/TigerTeam/PAISetup/PAI/include/zmq/zmq.hpp:297<BR>#5  0x00007ffb7a34b785 in tiger::MessageCenter::~MessageCenter (this=0x7ffb7a57c7a0, __in_chrg=<value optimized out>) at MessageCenter.cpp:319</P>
<P><BR>3.<BR>#0  zmq::object_t::send_stop (this=0x24817e0) at object.cpp:176<BR>#1  0x00007ffb78e9cee1 in zmq::ctx_t::destroy_socket (this=0x23a3020, socket_=0x2478d50) at ctx.cpp:314<BR>#2  0x00007ffb78eb67ee in zmq::socket_base_t::check_destroy (this=0x2478d50) at socket_base.cpp:1028<BR>#3  0x00007ffb78ea3482 in zmq::epoll_t::loop (this=0x244da00) at epoll.cpp:165<BR>#4  0x00007ffb78ec2e3b in thread_routine (arg_=0x244da70) at thread.cpp:81<BR>#5  0x0000003e9ce077e1 in start_thread () from /lib64/libpthread.so.0<BR>#6  0x0000003e9c2e153d in clone () from /lib64/libc.so.6</P>
<P> </P>
<P>but ConditionA on exit, only 1 and 2 happen.</P>
<P> </P>
<P>does anyone have clues or experiences about this?</P>