Detetando a interface


[Home] [Dissertação] [Biba] [Linux] [Conjugue] [br.ispell] [axw3] [uplink]

/*

Codigo elementar para deteccao da interface atraves da qual um
servico TCP foi acionado. Util para implementar servidores em
maquinas multidominio.

Este programa foi desenvolvido a partir da analise do fonte do
NCSA httpd.

*/

#include <netinet/in.h>
#include <stdio.h>

main(argc,argv)
int argc;
char *argv[];
{
    struct sockaddr_in serv_addr;

    int rc;
    long my_addr;
    int serv_addr_len;
    unsigned char dot1,dot2,dot3,dot4;

    serv_addr_len = sizeof(serv_addr);
    rc = getsockname(0,(struct sockaddr *)&serv_addr,&serv_addr_len);
    if (rc == 0) {
        my_addr = ntohl(serv_addr.sin_addr.s_addr);
        dot4 = my_addr & 0x000000ff;
        dot3 = (my_addr >> 8) & 0x0000ff;
        dot2 = (my_addr >> 16) & 0x00ff;
        dot1 = my_addr >> 24;
        printf("%u.%u.%u.%u",dot1,dot2,dot3,dot4);
    }
    else {
        printf("unknown\n");
    }
}