<div dir="ltr">Hi Martin,<div><br></div><div><span style="font-size:12.8px"><i>>> They are just called once. Sockets must be monitored in order to let dbus know when a new message arrives.</i></span></div><div><span style="font-size:12.8px">I am only curios why <b>DBus </b>cannot monitor socket by itself. First time when I faced with it it was surprise for me.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">One additional point:</span></div><div><span style="font-size:12.8px">"</span><i><span style="color:rgb(0,0,0);font-family:roboto,sans-serif;font-size:14px">When you use </span><a class="el" href="https://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html#gae1cb64f4cf550949b23fd3a756b2f7d0" title="Adds a message to the outgoing message queue." style="color:rgb(70,101,162);font-weight:bold;font-family:roboto,sans-serif;font-size:14px">dbus_connection_send()</a><span style="color:rgb(0,0,0);font-family:roboto,sans-serif;font-size:14px"> or one of its variants to send a message, the message is added to the outgoing queue. It's actually written to the network later; either in </span><a class="el" href="https://dbus.freedesktop.org/doc/api/html/group__DBusWatch.html#gac2acdb1794450ac01a43ec4c3e07ebf7" title="Called to notify the D-Bus library when a previously-added watch is ready for reading or writing..." style="color:rgb(70,101,162);font-weight:bold;font-family:roboto,sans-serif;font-size:14px">dbus_watch_handle()</a><span style="color:rgb(0,0,0);font-family:roboto,sans-serif;font-size:14px"> invoked by your main loop, or in </span><a class="el" href="https://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html#ga10e68d9d2f41d655a4151ddeb807ff54" title="Blocks until the outgoing message queue is empty." style="color:rgb(70,101,162);font-weight:bold;font-family:roboto,sans-serif;font-size:14px">dbus_connection_flush()</a><span style="color:rgb(0,0,0);font-family:roboto,sans-serif;font-size:14px"> which blocks until it can write out the entire outgoing queue. The GLib/Qt add-on libraries again handle the details here for you by setting up watch functions.</span></i><span style="font-size:12.8px">"</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">For this I implemented calling </span><i><a class="el" href="https://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html#ga10e68d9d2f41d655a4151ddeb807ff54" title="Blocks until the outgoing message queue is empty." style="text-decoration:underline;color:rgb(70,101,162);font-weight:bold;font-family:roboto,sans-serif;font-size:14px">dbus_connection_flush()</a> </i>on event <b>POLLOUT</b>, but this event never appears. For me it is very strange ... </div><div>But all sent messages by <span style="color:rgb(0,0,0);font-family:roboto,sans-serif;font-size:14px"> </span><a class="el" href="https://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html#gae1cb64f4cf550949b23fd3a756b2f7d0" title="Adds a message to the outgoing message queue." style="color:rgb(70,101,162);font-weight:bold;font-family:roboto,sans-serif;font-size:14px">dbus_connection_send()</a> arrives <b>successfully</b> (it even I have not received <b>POLLOUT </b>for making flush).</div><div><br></div><div>Do you know who ca <i><a class="el" href="https://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html#ga10e68d9d2f41d655a4151ddeb807ff54" title="Blocks until the outgoing message queue is empty." style="text-decoration:underline;color:rgb(70,101,162);font-weight:bold;font-family:roboto,sans-serif;font-size:14px">dbus_connection_flush()</a> </i>in this case ?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 27 December 2016 at 21:02, Martin Häfner <span dir="ltr"><<a href="mailto:martinhaefner@web.de" target="_blank">martinhaefner@web.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Denis,<div><br></div><div>the functions are called within this block in the dispatcher.cpp in order to register your callbacks:</div><br>Private(DBusConnection* conn)<br>{<br>#ifdef USE_POLL<br>   dbus_connection_set_watch_<wbr>functions(conn, &add_watch, &remove_watch, &toggle_watch, this, nullptr);<br>   dbus_connection_set_timeout_<wbr>functions (conn, &add_timeout, &remove_timeout, &toggle_timeout, this, nullptr);<br>#endif<br>}<div class="gmail_extra"><br></div><div class="gmail_extra">They are just called once. Sockets must be monitored in order to let dbus know when a new message arrives. But dbus also has timeout handling - if messages do not arrive intime or the daemon is not able to send data on the socket in a certain time. This is why timeouts are needed. Note that in a simple dbus application there is mostly only one socket alive at a time (the bus connection).</div><div class="gmail_extra"><br></div><div class="gmail_extra">Regards,</div><div class="gmail_extra">Martin </div><div><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2016-12-26 10:59 GMT+01:00 Денис Котов <span dir="ltr"><<a href="mailto:redradist@gmail.com" target="_blank">redradist@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi <span style="font-size:12.8px;white-space:nowrap">Martin,</span><div><span style="font-size:12.8px;white-space:nowrap"><br></span></div><div><span style="font-size:12.8px;white-space:nowrap">Thanks for link, but I have not found where you use the following functions:</span></div><div><span style="font-size:12.8px;white-space:nowrap">dbus_connection_set_watch_func<wbr>tions</span><br></div><div><span style="font-size:12.8px;white-space:nowrap">dbus_connection_set_timeout_fu<wbr>nctions</span><br></div><div><span style="font-size:12.8px;white-space:nowrap"><br></span></div><div><span style="font-size:12.8px;white-space:nowrap">???</span></div><div><span style="font-size:12.8px;white-space:nowrap"><br></span></div><div><span style="font-size:12.8px;white-space:nowrap">From your explanation and this example </span><span style="font-size:12.8px;white-space:nowrap"><a href="https://lists.freedesktop.org/archives/dbus/2007-October/008859.html" target="_blank">https://lists.freedesk<wbr>top.org/archives/dbus/2007-<wbr>October/008859.html</a> I have understood that </span><font color="#000000">watch - is a file descriptor that needed to be monitored ( for example in a new client has connected to service ), but timeout what is the purpose of this variable ?</font></div><div><font color="#000000">Okay, let's imagine that libdbus asked to create the timer, but for what purposes ? Should I handle file descriptor in that time or what ? And if I would not handle something in that timeout what will happen ?</font></div></div><div class="m_3237982323143988584gmail-HOEnZb"><div class="m_3237982323143988584gmail-h5"><div class="gmail_extra"><br><div class="gmail_quote">On 25 December 2016 at 22:10, Martin Häfner <span dir="ltr"><<a href="mailto:martinhaefner@web.de" target="_blank">martinhaefner@web.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Denis,<div><br></div><div>DBusWatch and Timeout are dbus callouts to integrate the dbus library into external event loops. You can write simple dbus driven applications with a simple main loop just calling the <span class="m_3237982323143988584gmail-m_-9120244656066218127m_2274272788409583409gmail-pl-c1" style="box-sizing:border-box;color:rgb(0,134,179);font-family:consolas,"liberation mono",menlo,courier,monospace;font-size:12px;white-space:pre-wrap">dbus_connection_read_write<wbr>_dispatch </span>function in a simple main loop. If you develop real world applications you will probably have to integrate the dbus API into a third-party main loop, e.g. from QApplication when implementing a Qt base GUI application. For the Qt example, you will probably make a mapping from a DBusTimeout to a QTimer and from a DBusWatch to QSocketNotifier. So, whenever DBus tells you to create a watch you will create a QSocketNotifier, and whenever DBus calls the callout to create a Timeout you create a QTimer. I have written a template-based C++ wrapper on top of DBus which implements the two different possibilities, once in a simple poll loop: You can have a look into the example at <a href="https://github.com/martinhaefner/simppl/blob/dbus2/src/dispatcher.cpp" target="_blank">https://github.com/martinhaefn<wbr>er/simppl/blob/dbus2/src/dispa<wbr>tcher.cpp</a></div><div><br></div><div>Regards,</div><div>Martin</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_3237982323143988584gmail-m_-9120244656066218127h5">2016-12-24 19:02 GMT+01:00 Денис Котов <span dir="ltr"><<a href="mailto:redradist@gmail.com" target="_blank">redradist@gmail.com</a>></span>:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="m_3237982323143988584gmail-m_-9120244656066218127h5"><div dir="ltr"><div><div><div><div>Hi All,<br><br></div>Currently I have faced with understanding of watch and timeout functions in libdbus.<br></div>I do not quit understand why they are needed.<br><br></div>From
 description I understand they are needed to check state of socket. If 
something changes then from libdbus I will receive this message and I 
have either to read something or to write something to socket.<br><br></div>It
 means that I should not create infinite while loop, but register 
callbacks and when will be possibility I will write to out-queue or read
 to in-queue, am I right ?<br clear="all"><div><br></div>And maybe some brief explanation what is DBusTimeout function ?<span class="m_3237982323143988584gmail-m_-9120244656066218127m_2274272788409583409HOEnZb"><font color="#888888"><br clear="all"><br>-- <br><div class="m_3237982323143988584gmail-m_-9120244656066218127m_2274272788409583409m_5441921365953488477gmail_signature"><div dir="ltr"><b>Best Regards<br>Denis Kotov</b><br></div></div>
</font></span></div>
<br></div></div>______________________________<wbr>_________________<br>
dbus mailing list<br>
<a href="mailto:dbus@lists.freedesktop.org" target="_blank">dbus@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/dbus" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/dbus</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="m_3237982323143988584gmail-m_-9120244656066218127gmail_signature"><div dir="ltr"><b>Best Regards<br>Denis Kotov</b><br></div></div>
</div>
</div></div></blockquote></div><br></div></div></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><b>Best Regards<br>Denis Kotov</b><br></div></div>
</div>