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?