r4757: added the ability of the clisocket level of libcli to handle async
authorAndrew Tridgell <tridge@samba.org>
Sat, 15 Jan 2005 10:38:12 +0000 (10:38 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:08:50 +0000 (13:08 -0500)
commite89fd49df7e63dcf37ee1aa7e2f50965851725c9
tree8484d3930707d1e8f97496f5b58ca3c1a8291dba
parentd327eb01bdc5ae196ece3707510629d95a8857b4
r4757: added the ability of the clisocket level of libcli to handle async
socket connections. This was complicated by a few factors:

 - it meant moving the event context from clitransport to clisocket,
   so lots of structures changed

 - we need to asynchronously handle connection to lists of port
   numbers, not just one port number. The code internally tries each
   port in the list in turn, without ever blocking

 - the man page on how connect() is supposed to work asynchronously
   doesn't work in practice (now why doesn't this surprise me?). The
   getsockopt() for SOL_ERROR is supposed to retrieve the error, but
   in fact the next (unrelated) connect() call on the same socket also
   gets an error, though not the right error. To work around this I
   need to tear down the whole socket between each attempted port. I
   hate posix.

Note that clisocket.c still does a blocking name resolution call in
smbcli_sock_connect_byname(). That will be fixed when we add the async
NBT resolution code.

Also note that I arranged things so that every SMB connection is now
async internally, so using plain smbclient or smbtorture tests all the
async features of this new code.
(This used to be commit 468f8ebbfdbdf37c757fdc4863626aa9946a8870)
source4/libcli/raw/clisocket.c
source4/libcli/raw/clitransport.c
source4/libcli/raw/libcliraw.h
source4/libcli/raw/rawrequest.c
source4/libcli/util/errormap.c
source4/librpc/rpc/dcerpc_smb.c
source4/ntvfs/cifs/vfs_cifs.c
source4/torture/torture.c