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

Code: Select all

(= -1 q)
to
(> (int q) -1)
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

Code: Select all

    (if (!= -1 q)

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.