chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-users] How to convert an UDP socket to file descriptor


From: Alexsandro Soares
Subject: [Chicken-users] How to convert an UDP socket to file descriptor
Date: Thu, 29 Apr 2010 00:20:18 -0300

Hello,

    I'm new in Chicken and I'm trying to write a small UDP client
using file-select. But i get the following error:

           Error: (port->fileno) argument is not a port: 45691

    Could someone help me with this problem?

    Thanks in advance for any answer.

Alex

   Here is my code

(define (udp-client server port)
  (let ((s (udp-open-socket*)))
    (begin
      (udp-bind! s #f 0)
      (udp-connect! s server port)
      (udp-send s "\n")
      (list s port))))

(define (message-loop sp)
  (let* ((s (car sp))
         (port (cadr sp))
         (fd (port->fileno (udp-bound-port s))))
    (let loop ((soc s)
                  (p port))
      (let-values (((ok dontcare) (file-select (list fd) #f)))
                   (if (car ok)
                       (receive (n data from port) (udp-recvfrom soc 8192)
                                (begin
                                  (processMsg n data from port)
                                  (loop from port)))
                       (loop soc p))))))

(define (processMsg n data server port)
  (print* n " bytes of " server ":" port "\n" data))

(define (execute)
  (let ((sp (udp-client "localhost" 6000)))
    (message-loop sp)))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]