Ⅱ. 手順
1. サンプルプログラムを書く
main.c
#include <stdio.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h> int main() { int sock = socket(PF_INET, SOCK_STREAM, 0); if (sock == -1) { printf("socket errno: %d\n", errno); close(sock); return -1; } char name[] = "eth0"; // char name[] = "eth1"; if (setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, name, sizeof(name)) == -1) { printf("setsockopt errno: %d\n", errno); close(sock); return -1; } struct sockaddr_in target = {0}; target.sin_family = PF_INET; target.sin_addr.s_addr = inet_addr("1.0.0.0"); // Your server IP address target.sin_port = htons(8000); // Your server port if (connect(sock, (struct sockaddr *)&target, sizeof(target)) == -1) { printf("connect errno: %d\n", errno); close(sock); return -1; } }
実行結果
接続元ホスト名が異なっている為、任意ネットワークインターフェイスでの接続に成功した事がわかる。
サーバー側
$ nc -k -v -l 8000 Connection received on ***.ipoe.ocn.ne.jp 34199 Connection received on ***.openmobile.ne.jp 3424
クライアント側
// eth0 gcc main.c && ./a.out // eth1 gcc main.c && ./a.out