guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 20/23: eports: nonblocking connect-eport


From: Andy Wingo
Subject: [Guile-commits] 20/23: eports: nonblocking connect-eport
Date: Thu, 24 Mar 2016 14:26:04 +0000

wingo pushed a commit to branch wip-ethreads
in repository guile.

commit 23b12b042d20b9f8bfeeccedad997528e9345b44
Author: Andy Wingo <address@hidden>
Date:   Fri Mar 30 17:39:32 2012 +0200

    eports: nonblocking connect-eport
    
    * module/ice-9/eports.scm (connect-eport): Add implementation of
      nonblocking `connect' for eports.
---
 module/ice-9/eports.scm |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/module/ice-9/eports.scm b/module/ice-9/eports.scm
index c6300d3..f098e84 100644
--- a/module/ice-9/eports.scm
+++ b/module/ice-9/eports.scm
@@ -34,6 +34,7 @@
             current-write-waiter
 
             accept-eport
+            connect-eport
 
             get-u8
             putback-u8
@@ -178,6 +179,17 @@
           (wait-for-readable eport)
           (accept-eport eport)))))
 
+;; Connect a socket eport to the remote host at SOCKADDR.  Returns no
+;; values.
+;;
+(define (connect-eport eport sockaddr)
+  (unless (nio-connect (eport-fd eport) sockaddr)
+    (wait-for-writable eport)
+    (let ((err (getsockopt (eport-fd eport) SOL_SOCKET SO_ERROR)))
+      (unless (zero? err)
+        (scm-error 'system-error "connect-eport" "~A"
+                   (list (strerror err)) #f)))))
+
 ;; Ensure that there are readable bytes in the buffer, or that the
 ;; buffer is at EOF.  Returns the actual number of available bytes.
 ;;



reply via email to

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