chicken-users
[Top][All Lists]
Advanced

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

[Chicken-users] wishlist: tcp.scm (tcp-port-numbers)


From: Daishi Kato
Subject: [Chicken-users] wishlist: tcp.scm (tcp-port-numbers)
Date: Tue, 15 Nov 2005 21:28:37 +0900
User-agent: Wanderlust/2.15.1 (Almost Unreal) Emacs/21.4 Mule/5.0 (SAKAKI)

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




reply via email to

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