chicken-users
[Top][All Lists]
Advanced

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

Re: [Chicken-users] udp.scm on cygwin


From: David Janssens
Subject: Re: [Chicken-users] udp.scm on cygwin
Date: Sat, 12 Nov 2005 19:16:15 +0100

Hello,
 
udp-recvfrom doesnt seem to work under cygwin with chicken v2.2. ("Bad address" error)
 
Replacing udp-recvfrom with this suggested patch doesnt work either:
 
(define udp-recvfrom
  (lambda (sock len)
    (let ((fd (io:descriptor sock))
          (buf (make-string len))
          (from (make-string _sockaddr_in_size)))
      (let-location ((fromlen int _sockaddr_in_size))
        (let ((result
               (restart-nonblocking "recvfrom" fd #t
                                    (lambda () (##net#recvfrom fd buf len
                                                               0 from #$fromlen)))))
          (values result (substring buf 0 result)
                  (##net#inaddr->string from) (##net#inaddr-port from)))))) )
 
However, udp-recvfrom seems to work when I replace it with this less portable version:
 
(define udp-recvfrom
  (lambda (sock len)
    (let ((fd (io:descriptor sock))
          (buf (make-string len))
          (from (make-string _sockaddr_in_size))
          (fromlen (make-string 4)))
      (string-set! fromlen 0 (integer->char _sockaddr_in_size))
      (string-set! fromlen 1 (integer->char 0))
      (string-set! fromlen 2 (integer->char 0))
      (string-set! fromlen 3 (integer->char 0))
      (let ((result
             (restart-nonblocking "recvfrom" fd #t
                                  (lambda () (##net#recvfrom fd buf len
                                                             0 from
                                                             fromlen)))))
        (values result (substring buf 0 result)
                (##net#inaddr->string from) (##net#inaddr-port from))))))
 
Does anyone have a clue why this is so?
 
David

reply via email to

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