chicken-users
[Top][All Lists]
Advanced

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

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


From: felix winkelmann
Subject: Re: [Chicken-users] wishlist: tcp.scm (tcp-port-numbers)
Date: Thu, 17 Nov 2005 17:11:55 +0100

Thanks, I've added this to tcp.scm.


cheers,
felix

On 11/15/05, Daishi Kato <address@hidden> wrote:
> 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
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/chicken-users
>




reply via email to

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