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
_______________________________________________
Chicken-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to