net.rkt
#lang racket/base

(require (planet vyzo/socket:3)
         (planet synx/sizeof:2))

; why does this do a DNS lookup, then fail vyzo? >:(
(define (aton address)
  (integer-bytes->integer
   (subbytes (pack-address (inet4-address address 0)) 0 8)
   #f
   #t))

(define in-size (sizeof "struct sockaddr_in" "netinet/in"))

(define (ntoa n)
  (bytes->string/utf-8
   (inet-address-host
    (unpack-address
     (bytes-append
      (integer->integer-bytes n 8 #f #t)
      (list->bytes (build-list (- in-size 8) (lambda (i) 0))))))))
  
(provide aton ntoa)