timeout question about net-receive

Started by csfreebird, April 20, 2013, 02:47:28 AM

Previous topic - Next topic

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?

csfreebird

#1
I write some codes for solving this problem:



;; 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))
  ))

winger

#2
(= -1 q)
to
(> (int q) -1)

because
(throw-error "connection is closed")
Welcome to a newlisper home:)

http://www.cngrayhat.org\">//http://www.cngrayhat.org

csfreebird

#3
What's your point?

my codes is

   (if (!= -1 q)

winger

#4
r is a string "'connection is closed" "when socket been closed by romote.

Then  expr "(min q number)" will broke .
Welcome to a newlisper home:)

http://www.cngrayhat.org\">//http://www.cngrayhat.org

csfreebird

#5
you are right. Thank you.