<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/4.2.2">
</HEAD>
<BODY>
El mié, 09-12-2015 a las 11:15 +0200, Rami Rosenbaum escribió:
<BLOCKQUOTE TYPE=CITE>
    Hello,<BR>
</BLOCKQUOTE>
<BR>
Hi Rami,<BR>
<BR>
<BLOCKQUOTE TYPE=CITE>
    I'm using noPoll lib in my Qt GUI application.<BR>
    <BR>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    I am using it in non-blocking mode, within my main thread, using timer-events and a state machine.<BR>
    <BR>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    The scenario happens on both my Ubuntu laptop and my ARM embedded Linux.<BR>
</BLOCKQUOTE>
<BR>
Ok,<BR>
<BR>
<BLOCKQUOTE TYPE=CITE>
    I just noticed that when my server was down (I'm not sure what that means, in networking concepts) - nopoll_conn_new() blocked for its' default timeout (20 seconds).<BR>
    <BR>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    So<BR>
    <B>Question 1: is nopoll_conn_new() blocking?</B><BR>
</BLOCKQUOTE>
<BR>
Ok, yes and no, it is blocking with a timeout but just for sending the client<BR>
init (the initial packet that a WebSocket client must send), but the function<BR>
does not block the caller until a reply from the server is received and the <BR>
handshake is completed,<BR>
<BR>
So, it essence, nopoll_conn_new (and all its variants) is not blocking<BR>
(unless you have a problem with network connection causing send() API<BR>
to fail to send the WebSocket init message by returning EWOULD_BLOCK,<BR>
which is very likely to not happen),<BR>
<BR>
In that, the connection (noPollConn) reported by this function have big<BR>
chances to be not ready (that's why you have to use nopoll_conn_is_ready<BR>
or the blocking one nopoll_conn_wait_until_connection_ready to ensure<BR>
you successfully connected),<BR>
<BR>
<BLOCKQUOTE TYPE=CITE>
    I found nopoll_conn_connect_timeout(), but it's not in the API.<BR>
    <BR>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    So I changed the timeout:
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    m_ctx->conn_connect_std_timeout = 2 * 1000 * 1000; // 2 seconds<BR>
    <BR>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
    and it worked.<BR>
</BLOCKQUOTE>
<BR>
Ok, there's a function (<B>nopoll_conn_connect_timeout) </B>which is<BR>
already implemented but wasn't on the nopoll_conn.h header.<BR>
<BR>
There's also a <B>nopoll_conn_get_connect_timeout</B>  that also allows<BR>
to get current value configured...but again, it was also missing in the<BR>
public header,<BR>
<BR>
Now, both are available at the nopoll_conn.h header (please checkout<BR>
latest SVN <A HREF="https://github.com/asples/nopoll">https://github.com/asples/nopoll</A>)<BR>
<BR>
<BLOCKQUOTE TYPE=CITE>
    <B>Question 2: is nopoll_conn_connect_timeout() in the API?</B><BR>
</BLOCKQUOTE>
<BR>
Yes it shouldn't but wasn't declared at the header, <BR>
<BR>
<BR>
<BLOCKQUOTE TYPE=CITE>
    Anyway - I can't block my main thread, so what do you recommend?<BR>
</BLOCKQUOTE>
<BR>
Ok, you can reduce to the minimum the connect timeout as you did...<BR>
<BR>
..and after nopoll_conn_new finishes, use mentioned functions regularly<BR>
to check if you did connect,<BR>
<BR>
Best Regards,
<BR>
<BR>
Thanks<BR>
<BLOCKQUOTE TYPE=CITE>
    <BR>
</BLOCKQUOTE>
<BLOCKQUOTE TYPE=CITE>
<PRE>
_______________________________________________
noPoll mailing list
<A HREF="mailto:noPoll@lists.aspl.es">noPoll@lists.aspl.es</A>
<A HREF="http://lists.aspl.es/cgi-bin/mailman/listinfo/nopoll">http://lists.aspl.es/cgi-bin/mailman/listinfo/nopoll</A>
</PRE>
</BLOCKQUOTE>
<BR>
<TABLE CELLSPACING="0" CELLPADDING="0" WIDTH="100%">
<TR>
<TD>
<PRE>
-- 
Francis Brosnan Blázquez  -  ASPL
<A HREF="http://www.asplhosting.com/">http://www.asplhosting.com/</A>
<A HREF="http://www.aspl.es/">http://www.aspl.es/</A>
<A HREF="https://twitter.com/aspl_es">https://twitter.com/aspl_es</A>
<A HREF="https://twitter.com/asplhosting">https://twitter.com/asplhosting</A>
<A HREF="https://twitter.com/francisbrosnanb">https://twitter.com/francisbrosnanb</A>

91 134 14 22 - 91 134 14 45 - 91 116 07 57

AVISO LEGAL
 
En virtud de lo dispuesto en la Ley Orgánica 15/1999, de 13 de
diciembre, de Protección de Datos de Carácter Personal, le informamos de
que sus datos de carácter personal, recogidos de fuentes accesibles al
público o datos que usted nos ha facilitado previamente, proceden de
bases de datos propiedad de Advanced Software Production Line, S.L.
(ASPL).
 
ASPL garantiza que los datos serán tratados con la finalidad de mantener
las oportunas relaciones comerciales o promocionales con usted o la
entidad que usted representa. No obstante, usted puede ejercitar sus
derechos de acceso, rectificación, cancelación y oposición dispuestos en
la mencionada Ley Orgánica, notificándolo por escrito a ASPL -
Protección Datos, C/Antonio Suárez 10 A-102, 28802, Alcalá de Henares
(Madrid).


</PRE>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>