This is the mail archive of the guile@cygnus.com mailing list for the guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Unschemisch connect/listen/bind


Hi there.
Just a note, the connect, listen and bind subr's from socket.c are very
unschemisch in that they don't return anything.
You have to say

guile> (define sock (socket AF_INET SOCK_STREAM 0))
guile> (connect sock AF_INET
		(car (array-ref (gethostbyname "server") 4))
		port)

instead of just

guile (define sock (connect (socket AF_INET SOCK_STREAM 0) AF_INET
			(car (array-ref (gethostbyname "server") 4))
			port))

Which would be much more elegant, IMHO.
The following patch fixes this "bug" in connect, listen and bind.

diff -urN guile-core/libguile/socket.c guile-core-new/libguile/socket.c
--- guile-core/libguile/socket.c	Mon Oct 19 23:36:26 1998
+++ guile-core-new/libguile/socket.c	Mon Nov 30 08:12:53 1998
@@ -395,7 +395,7 @@
     scm_syserror (s_connect);
   scm_must_free ((char *) soka);
   SCM_ALLOW_INTS;
-  return SCM_UNSPECIFIED;
+  return sock;
 }
 
 SCM_PROC (s_bind, "bind", 3, 0, 1, scm_bind);
@@ -421,7 +421,7 @@
   if (rv == -1)
     scm_syserror (s_bind);
   scm_must_free ((char *) soka);
-  return SCM_UNSPECIFIED;
+  return sock;
 }
 
 SCM_PROC (s_listen, "listen", 2, 0, 0, scm_listen);
@@ -438,7 +438,7 @@
   fd = fileno ((FILE *)SCM_STREAM (sock));
   if (listen (fd, SCM_INUM (backlog)) == -1)
     scm_syserror (s_listen);
-  return SCM_UNSPECIFIED;
+  return sock;
 }
 
 /* Put the components of a sockaddr into a new SCM vector.  */

Hack on,
	-forcer

-- 
((email . "forcer@mindless.com")       (www . "http://webserver.de/forcer/")
 (irc   . "forcer@#StarWars (IRCnet)") (pgp . "key available on my website"))