From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Ian Sheldon Newsgroups: gmane.lisp.guile.bugs Subject: Re: [PATCH] posix.texi: added additional examples Date: Mon, 18 Mar 2002 23:16:02 +0000 Sender: bug-guile-admin@gnu.org Message-ID: <3C967532.6090806@kaidea.freeserve.co.uk> References: <3C9629FF.1070008@kaidea.freeserve.co.uk> NNTP-Posting-Host: localhost.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Trace: main.gmane.org 1016507227 12171 127.0.0.1 (19 Mar 2002 03:07:07 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Tue, 19 Mar 2002 03:07:07 +0000 (UTC) Cc: bug-guile@gnu.org Original-Received: from fencepost.gnu.org ([199.232.76.164]) by main.gmane.org with esmtp (Exim 3.33 #1 (Debian)) id 16n9xr-0003A5-00 for ; Tue, 19 Mar 2002 04:07:07 +0100 Original-Received: from localhost ([127.0.0.1] helo=fencepost.gnu.org) by fencepost.gnu.org with esmtp (Exim 3.34 #1 (Debian)) id 16n6OE-0002Kr-00; Mon, 18 Mar 2002 18:18:06 -0500 Original-Received: from cmailg3.svr.pol.co.uk ([195.92.195.173]) by fencepost.gnu.org with esmtp (Exim 3.34 #1 (Debian)) id 16n6MR-0002IR-00 for ; Mon, 18 Mar 2002 18:16:16 -0500 Original-Received: from modem-951.alakazam.dialup.pol.co.uk ([217.135.14.183] helo=zeus.kaidea.freeserve.co.uk) by cmailg3.svr.pol.co.uk with esmtp (Exim 3.35 #1) id 16n6MK-0001WU-00; Mon, 18 Mar 2002 23:16:09 +0000 Original-Received: from kaidea.freeserve.co.uk (localhost.localdomain [127.0.0.1]) by zeus.kaidea.freeserve.co.uk (8.9.3/8.9.3) with ESMTP id XAA13984; Mon, 18 Mar 2002 23:16:02 GMT User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9+) Gecko/20020308 X-Accept-Language: en-us, en Original-To: Neil Jerram Errors-To: bug-guile-admin@gnu.org X-BeenThere: bug-guile@gnu.org X-Mailman-Version: 2.0.5 Precedence: bulk List-Help: List-Post: List-Subscribe: , List-Id: Bug reports for GUILE, GNU's Ubiquitous Extension Language List-Unsubscribe: , List-Archive: Xref: main.gmane.org gmane.lisp.guile.bugs:27 X-Report-Spam: http://spam.gmane.org/gmane.lisp.guile.bugs:27 No problems. Here's the patch without the extra @node updates. I haven't signed any papers with the FSF so if the patch is considered too big to incorporate without signing copyright papers then I'd be happy to. * posix.texi: Added more examples of usage and a sample TCP/IP client/server. --- doc/ref/posix.texi.orig Sun Mar 10 20:49:59 2002 +++ doc/ref/posix.texi Mon Mar 18 22:41:52 2002 @@ -701,6 +701,16 @@ @deffn primitive closedir port Close the directory stream @var{stream}. The return value is unspecified. + +To display all the entries in a directory: +@example +(define dir (opendir "/usr/lib")) +(do ((entry (readdir dir) (readdir dir))) + ((eof-object? entry)) + (display entry)(newline)) +(closedir dir) +@end example + @end deffn @deffn primitive sync @@ -753,6 +763,11 @@ base name is the file name without any directory components. If @var{suffix} is provided, and is equal to the end of @var{basename}, it is removed also. + +@lisp +(basename "/tmp/test.xml" ".xml") +@result{}"test" +@end lisp @end deffn @@ -970,6 +985,11 @@ month and day names is dependent on the current locale. The value returned is the formatted string. @xref{Formatting Date and Time, , , libc, The GNU C Library Reference Manual}.) + +@lisp +(strftime "%c" (localtime (current-time))) +@result{}"Mon Mar 11 20:17:43 2002" +@end lisp @end deffn @deffn primitive strptime format string @@ -1549,6 +1569,13 @@ @deffn procedure open-input-pipe command Equivalent to @code{open-pipe} with mode @code{OPEN_READ}. + +@lisp +(read-line (open-input-pipe "date")) +@result{}"Mon Mar 11 20:10:44 GMT 2002" +(waitpid WAIT_ANY) +@result{}(24160 . 0) +@end lisp @end deffn @deffn procedure open-output-pipe command @@ -1572,6 +1599,7 @@ * Network Address Conversion:: * Network Databases:: * Network Sockets and Communication:: +* Internet Socket Examples:: @end menu @node Network Address Conversion @@ -1705,6 +1733,13 @@ @code{no-data}, corresponding to the equivalent @code{h_error} values. Unusual conditions may result in errors thrown to the @code{system-error} or @code{misc_error} keys. + +@lisp +(gethost "www.gnu.org") +@result{}#("www.gnu.org" () 2 4 (3353880842)) +(gethostbyname "www.emacs.org") +@result{}#("emacs.org" ("www.emacs.org") 2 4 (1073448978)) +@end lisp @end deffn The following procedures may be used to step through the host @@ -1874,6 +1909,14 @@ @code{getservent} (see below). @end deffn +@lisp +(getserv "imap" "tcp") +@result{}#("imap2" ("imap") 143 "tcp") +(getservbyport 88 "udp") +@result{}#("kerberos" ("kerberos5" "krb5") 88 "udp") +@end lisp + + The following procedures may be used to step through the service database from beginning to end. @@ -2241,6 +2284,68 @@ (uniform-vector-read! v port) (ntohl (uniform-vector-ref v 0))))) @end example + +@node Internet Socket Examples +@subsection Network Socket Examples +The following sections give examples of how to use network sockets. + +@menu +* Internet Socket Client:: +* Internet Socket Server:: +@end menu + +@node Internet Socket Client +@subsubsection Internet Socket Client Example +@cindex socket client example + +The following example demonstrates an Internet socket client. +It connects to the HTTP daemon running on the local machine and +returns the contents of the root index URL. + +@example +(let ((s (socket AF_INET SOCK_STREAM 0))) + (connect s AF_INET (inet-aton "127.0.0.1") 80) + (display "GET / HTTP/1.0\r\n\r\n" s) + + (do ((line (read-line s) (read-line s))) + ((eof-object? line)) + (display line)(newline))) +@end example + +@node Internet Socket Server +@subsubsection Internet Socket Server Example +@cindex socket server example + +The following example shows a simple Internet server which listens on +port 2904 for incoming connections and sends a greeting back to the +client. + +@example +(let ((s (socket AF_INET SOCK_STREAM 0))) + (setsockopt s SOL_SOCKET SO_REUSEADDR 1) + ;; Specific address? +; (bind s AF_INET (inet-aton "127.0.0.1") 2904) + (bind s AF_INET INADDR_ANY 2904) + (listen s 5) + + (simple-format #t "Listening for clients in pid: ~S" (getpid)) + (newline) + + (while #t + (let* ((client-connection (accept s)) + (client-details (cdr client-connection)) + (client (car client-connection))) + (simple-format #t "Got new client connection: ~S" client-details) + (newline) + (simple-format #t "Client address: ~S" + (gethostbyaddr + (sockaddr:addr client-details)))(newline) + ;; Send back the greeting to the client port + (display "Hello client\r\n" client) + (close client)))) +@end example + + @node System Identification @section System Identification _______________________________________________ Bug-guile mailing list Bug-guile@gnu.org http://mail.gnu.org/mailman/listinfo/bug-guile