guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 09/10: Support `connect' on nonblocking sockets


From: Andy Wingo
Subject: [Guile-commits] 09/10: Support `connect' on nonblocking sockets
Date: Thu, 9 Jun 2016 09:01:13 +0000 (UTC)

wingo pushed a commit to branch master
in repository guile.

commit 69ea1fc45b2b06bda2e435d198e610fa9157c7ac
Author: Andy Wingo <address@hidden>
Date:   Thu Jun 2 23:12:06 2016 +0200

    Support `connect' on nonblocking sockets
    
    * libguile/socket.c (scm_connect):
    * doc/ref/posix.texi (Network Sockets and Communication): Support
      connect on nonblocking ports.
---
 doc/ref/posix.texi |   10 ++++++----
 libguile/socket.c  |    7 +++++--
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/doc/ref/posix.texi b/doc/ref/posix.texi
index 4d2a850..09bcd81 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
address@hidden 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 55b9357..37e9f52 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
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]