diff options
author | Andy Wingo <wingo@pobox.com> | 2016-06-02 23:12:06 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-06-09 10:59:08 +0200 |
commit | 69ea1fc45b2b06bda2e435d198e610fa9157c7ac (patch) | |
tree | 6f73028211b76b6e2e27dd64f9f253e8a0432d94 | |
parent | e6cc051f8c3f6851be4f51ccb14109d03ae867ba (diff) | |
download | guile-69ea1fc45b2b06bda2e435d198e610fa9157c7ac.tar.gz |
Support `connect' on nonblocking sockets
* libguile/socket.c (scm_connect):
* doc/ref/posix.texi (Network Sockets and Communication): Support
connect on nonblocking ports.
-rw-r--r-- | doc/ref/posix.texi | 10 | ||||
-rw-r--r-- | libguile/socket.c | 7 |
2 files changed, 11 insertions, 6 deletions
diff --git a/doc/ref/posix.texi b/doc/ref/posix.texi index 4d2a850cf..09bcd816b 100644 --- a/doc/ref/posix.texi +++ b/doc/ref/posix.texi @@ -3213,10 +3213,12 @@ The return value is unspecified. @deffnx {Scheme Procedure} connect sock AF_INET6 ipv6addr port [flowinfo [scopeid]] @deffnx {Scheme Procedure} connect sock AF_UNIX path @deffnx {C Function} scm_connect (sock, fam, address, args) -Initiate a connection on socket port @var{sock} to a given address. -The destination is either a socket address object, or arguments the -same as @code{make-socket-address} would take to make such an object -(@pxref{Network Socket Address}). The return value is unspecified. +Initiate a connection on socket port @var{sock} to a given address. The +destination is either a socket address object, or arguments the same as +@code{make-socket-address} would take to make such an object +(@pxref{Network Socket Address}). Return true unless the socket was +configured as non-blocking and the connection could not be made +immediately. @example (connect sock AF_INET INADDR_LOOPBACK 23) diff --git a/libguile/socket.c b/libguile/socket.c index 55b93572c..37e9f523f 100644 --- a/libguile/socket.c +++ b/libguile/socket.c @@ -834,7 +834,8 @@ SCM_DEFINE (scm_connect, "connect", 2, 1, 1, "Alternatively, the second argument can be a socket address object " "as returned by @code{make-socket-address}, in which case the " "no additional arguments should be passed.\n\n" - "The return value is unspecified.") + "Return true, unless the socket was configured to be non-blocking\n" + "and the operation has not finished yet.\n") #define FUNC_NAME s_scm_connect { int fd; @@ -859,10 +860,12 @@ SCM_DEFINE (scm_connect, "connect", 2, 1, 1, free (soka); errno = save_errno; + if (errno == EINPROGRESS) + return SCM_BOOL_F; SCM_SYSERROR; } free (soka); - return SCM_UNSPECIFIED; + return SCM_BOOL_T; } #undef FUNC_NAME |