Hey guys, Thanks a lot for your quick answers! My ping method now: (define (ping hostname port-no personalip) (define t (thread (lambda () (with-handlers ((exn:fail:network? (lambda (x) (begin (displayln (string-append hostname ":" (number->string port-no) " NOOOOOOOOOO")) #f))));(displayln (exn-message x))))) (define-values (in out) (tcp-connect hostname port-no)) (write "'ping" out) (write personalip out) (flush-output out) (display (string-append hostname ":" (number->string port-no) " ")) (displayln (read in)) (close-input-port in) (close-output-port out) #t)))) (sync/timeout 0.01 t) (kill-thread t)) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ This is the result when I do a multicast from 192.168.1.0 to 192.168.1.200. ( a lot of these don't exist and that's why tcp-connect was taking ages to throw an error.) Those returning a NOOOOO are existing network nodes where no server is running. Pong is the answer from the server running on my laptop. > (multicast-ping "192.168.1.100" 8080 0 200)192.168.1.0:8080 > NOOOOOOOOOO192.168.1.105:8080 NOOOOOOOOOO192.168.1.108:8080 > pong-------------------Multicast finished! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
It's still test-code but it's working fine now, maybe the timout time is too small but now it works well! Greetings,Nicolas Subject: Re: [racket-dev] Implementation question From: matth...@ccs.neu.edu Date: Sat, 19 Apr 2014 09:25:27 -0400 CC: nicocarra...@hotmail.com; dev@racket-lang.org To: laurent.ors...@gmail.com Let me recommend events instead: #lang racket ;; Nat -> Void ;; wait for t seconds before connecting to google.com, then stop(define (do-work t) (thread (lambda () (with-handlers ((exn:fail:network? (lambda (x) (displayln (exn-message x))))) (sleep t) (define-values (in out) (tcp-connect "google.com" 80)) 'done)))) ;; returns #f if 3 seconds pass w/o the thread shutting down (sync/timeout 3 (do-work (random 6))) On Apr 19, 2014, at 8:34 AM, Laurent wrote:One simpler possibility is to use `tcp-connect/enable-break` and run a timer in parallel to break it after a shorter delay. For example: (define-values (in out) (values #f #f)) (define connect-thread (thread (λ()(set!-values (in out) (tcp-connect "www.google.com" 80))))) (sleep 3) (unless in (displayln "Connection not established. Breaking thread.") (break-thread connect-thread)) The timer can also be place into its own thread if you need to set up several connections in parallel. Hope this helps,Laurent On Thu, Apr 17, 2014 at 6:48 PM, nicolas carraggi <nicocarra...@hotmail.com> wrote: Hello, I am actually using "Racket/tcp" for a project in Racket.I'm creating a peer-to-peer network but now I encountered a small problem.For a multicast I want to connect with each server on the same network. For this I use "tcp-connect", but when i try to connect to an ip address which is not hosting a server, throwing the error only happens after more than 1 minute. So I would like to use a modified "tcp-connect" with a smaller time-out. Where can I find the implementation of "tcp-connect"? I already found "tcp.rkt" but there it gets the "tcp-connect" method from "'#%network" but I can't find this one... Greetings!Nicolas _________________________ Racket Developers list: http://lists.racket-lang.org/dev _________________________ Racket Developers list: http://lists.racket-lang.org/dev
_________________________ Racket Developers list: http://lists.racket-lang.org/dev