As far as I understand, there is no way in tcp.scm,
to get port numbers of connected sockets.
tcp-addresses is available, which returns only IP addresses.
tcp-addresses could be modified so that
it returns four values including port numbers,
however, for backward compatibility I would suggest
tcp-port-numbers that returns two values.
It would be something like this:

(define (tcp-port-numbers p)
  (let ([fd (##sys#tcp-port->fileno p)])
    (values 
     (or (##net#getsockport fd)
         (##sys#signal-hook #:network-error 'tcp-port-numbers 
(##sys#string-append "can not compute local port - " strerror) p) )
     (or (##net#getpeerport fd)
         (##sys#signal-hook #:network-error 'tcp-port-numbers 
(##sys#string-append "can not compute remote port - " strerror) p) ) ) ) )

(define ##net#getpeerport
  (foreign-lambda* int ([int s])
    "struct sockaddr_in sa;"
    "int len = sizeof(struct sockaddr_in);"
    "if(getpeername(s, (struct sockaddr *)&sa, (socklen_t *)(&len)) != 0) 
return(-1);"
    "else return(ntohs(sa.sin_port));") )

[just copied from tcp.scm and slightly modified.]

Any comments?

Daishi


_______________________________________________
Chicken-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to