Binding socket to a network interface ip transfers data through loopback

72 Views Asked by At

I'm running some experiments regarding network communication and wrote a simple client-server application using the IP address of a specific network interface. Here is a sample:

server.c

serv_addr.sin_family = AF_INET;
//corresponds to wifi adapter
serv_addr.sin_addr.s_addr = inet_addr("100.100.100.100"); 
serv_addr.sin_port = htons(22222);
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
//bind socket to the NI
bind(socket_fd, (struct sockaddr *) &serv_addr, sizeof serv_addr); 
listen(socket_fd, 1);

client.c

struct sockaddr_in serv_addr;
memset(&serv_addr, '\0', sizeof serv_addr);
serv_addr.sin_family = AF_INET;
//corresponds to wifi adapter
serv_addr.sin_addr.s_addr = inet_addr("100.100.100.100"); 
serv_addr.sin_port = htons(22222);
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
//bind socket to the NI
bind(socket_fd, (struct sockaddr *) &serv_addr, sizeof serv_addr); 
connect(socket_fd, (struct sockaddr *) &serv_addr, sizeof serv_addr);

Here is the ifconfig output after running the client and server on a local laptop once:

lo: [...]
        inet 127.0.0.1
        RX packets 73718  bytes 1320101962 (1.3 GB) //<--- Data were received through loopback
        TX packets 73718  bytes 1320101962 (1.3 GB) //<--- Data were transmitted through loopback
        [...]

wirl0: [...]
        inet 100.100.100.100
        RX packets 54020  bytes 61156291 (61.1 MB) //<-- left unchanged after run
        TX packets 25452  bytes 3745001 (3.7 MB)   //<-- left unchanged after run

The Problem:

Even after binding both client and server to a specific network interface the data were anyway transferred through lo. What I want to achieve is the actual nic comes into play when transferring data. Is it possible to do?

0

There are 0 best solutions below