Page 1 of 1
timeout question about net-receive
Posted: Sat Apr 20, 2013 9:47 am
by csfreebird
net-receive has not one timeout argument. When will it return if no data is sent by remote peer?
And another question, is it possible to set the timeout now?
Re: timeout question about net-receive
Posted: Sun Apr 28, 2013 12:14 pm
by csfreebird
I write some codes for solving this problem:
Code: Select all
;; socket.lsp
(context 'socket)
;; return the number of bytes which are ready to read
;; throw error if connection is closed
(define (net-peek-ex s)
(unless (net-peek s)
(throw-error "connection is closed")))
;; read specified size of data from connection in specified milliseconds
;; s means socket
;; timeout means waiting for milliseconds
;; return the receivied data
;; return () if timeout
(define (read-data s timeout number)
(let ((t (time-of-day)) (r 0))
(catch
(while true
(begin
(sleep 1)
(set 'r (net-peek-ex s))
(if (> r 0) (throw r))
(if (> (- (time-of-day) t) timeout) (throw -1))
)) 'q)
(if (!= -1 q)
(begin (net-receive s buffer (min q number)) buffer)
'()
)))
(define (test)
;;(set 's (net-connect "localhost" 7777))
(set 's (net-connect "www.baidu.com" 80))
(let (x (read-data s 50 10 buff))
(if x (println x) (println "nil:" x))
))
Re: timeout question about net-receive
Posted: Mon Apr 29, 2013 4:40 am
by winger
because
Code: Select all
(throw-error "connection is closed")
Re: timeout question about net-receive
Posted: Mon Apr 29, 2013 5:08 am
by csfreebird
What's your point?
my codes is
Re: timeout question about net-receive
Posted: Sat May 04, 2013 6:06 pm
by winger
r is a string "'connection is closed" "when socket been closed by romote.
Then expr "(min q number)" will broke .
Re: timeout question about net-receive
Posted: Tue May 07, 2013 4:19 am
by csfreebird
you are right. Thank you.