--- udp.scm.orig	2005-10-23 11:37:53.000000000 +0900
+++ udp.scm	2005-10-23 11:37:53.000000000 +0900
@@ -457,11 +457,16 @@
   (lambda (sock len)
     (let ((fd (io:descriptor sock))
           (buf (make-string len))
-          (from (make-string _sockaddr_in_size)))
+          (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 (make-string 4))))))
+                                          0 from fromlen)))))
         (values result (substring buf 0 result)
                 (##net#inaddr->string from) (##net#inaddr-port from))))))
 
