unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* a little puzzle
@ 2010-10-08 17:14 Andy Wingo
  2010-10-08 17:32 ` Andy Wingo
  0 siblings, 1 reply; 3+ messages in thread
From: Andy Wingo @ 2010-10-08 17:14 UTC (permalink / raw)
  To: guile-devel

Put this in your REPL and smoke it:

    (define* (make-me-a-socket #:key
                               (host #f)
                               (addr (if host (inet-aton host) INADDR_LOOPBACK))
                               (port 37146))
      (let ((server (socket PF_INET SOCK_STREAM 0)))
        (setsockopt server SOL_SOCKET SO_REUSEADDR 1)
        (bind server AF_INET addr port)
        (listen server 5)
        server))

    (sigaction SIGINT (lambda (sig) (throw 'foo)))

    (define s (make-me-a-socket))
    (accept s) ; Now Ctrl-C

What do you expect to happen here?

Probably not this:

    ERROR: In procedure accept:
    ERROR: Interrupted system call
    Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
    scheme@(guile-user) [1]> 
    Throw to key `foo' with args `()' while reading expression.
    scheme@(guile-user) [1]> 

That's right: two throws for the price of one! The interrupted syscall,
and then the asynchronous signal. Fun...

Andy
-- 
http://wingolog.org/



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-10-10 14:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-08 17:14 a little puzzle Andy Wingo
2010-10-08 17:32 ` Andy Wingo
2010-10-10 14:58   ` Andy Wingo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).