Having problems understanding async_connect_send and async_connect_connected in lib/async_req/async_soc.c

Ralph Boehme rb at sernet.de
Fri Oct 16 21:04:57 UTC 2015


On Fri, Oct 16, 2015 at 01:22:51PM -0700, Richard Sharpe wrote:
> Hi folks,
> 
> I am having problems reconciling this man connect with respect to EINPROGRESS:
> 
>               The  socket  is  non-blocking  and the connection cannot be com-
>               pleted immediately.  It is possible to select(2) or poll(2)  for
>               completion by selecting the socket for writing.  After select(2)
>               indicates writability, use getsockopt(2) to  read  the  SO_ERROR
>               option  at  level SOL_SOCKET to determine whether connect() com-
>               pleted  successfully  (SO_ERROR  is  zero)   or   unsuccessfully
>               (SO_ERROR  is one of the usual error codes listed here, explain-
>               ing the reason for the failure).
> 
> However, the code in async_connect_connected simply calls connect
> again, which strace tells me is getting ECONNREFUSED ...
> 
> So, I am confused ...
> 
> Perhaps there is some missing code for the AF_INET case?

at first glance, the code in async_connect_connected seems wrong to
me. The right thing to do would be calling getsockopt() as described
in the manpage.

Calling connect() a second time on a non-blocking socket with a
previous connect in flight would return EALREADY according to man
socket(2).

Cheerio!
-slow

-- 
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de,mailto:kontakt@sernet.de



More information about the samba-technical mailing list