我正在尝试用Scheme编写一个具有Bigloo实现的应用服务器。代码:
(module server
(library fthread)
(main main))
(define *port-num* 8080)
(define (main argv)
(let* ((socket0 (make-server-socket *port-num*))
(ts (thread-start! (make-thread (lambda () (start-server socket0))))))
(scheduler-start!)
(fprint (current-error-port) "Shutting down...")))
(define (start-server socket0)
(lambda ()
(print "Starting server...")
(let loop ()
(let ((s (socket-accept socket0)))
(print "New connection: " s)
(thread-start! (make-thread (lambda () (handle-request s))))
(thread-yield!)
(loop)))))
(define (handle-request s)
(print "new request")
(socket-shutdown s #f))它编译正常,但程序在启动后立即终止:
$ bigloo -o server server.scm
$ ./server
Shutting down...我哪里错了?
非常感谢。
发布于 2009-02-11 19:47:38
我不知道Bigloo的fthread库,但是你会不会立即从start-server返回lambda而不是工作呢?
就像我说的,我不知道fthread,所以也许这就是你应该如何使用它。除了在handle-request中您没有这个lambda包装器,并且您调用make-thread的方式完全相同:
(make-thread (lambda () (start-server socket0)))
; vs
(make-thread (lambda () (handle-request s)))如果这就是问题所在,您可以通过在start-server中去掉lambda,或者通过将第一个make-thread调用更改为
(make-thread (start-server socket0))https://stackoverflow.com/questions/537899
复制相似问题