bind()関数で自分のIPアドレスを指定できます。
クライアント・プログラムの場合は、connect()を実行する前に、sockaddr_in構造体のsin_addrに自分のIPアドレスを指定して、bind()を呼び出せばOKです。(UDPの場合は、sendto()の前にbind()を実行)
サーバ・プログラムの場合も、bind()引数のsockaddr_in構造体のsin_addrに、自分のアドレスを指定すれば待ち受けIPアドレスを限定できます。
WSADATA wsaData; struct sockaddr_in da; struct sockaddr_in sa; SOCKET s; char buff[1024]; int n; WSAStartup(MAKEWORD(2,0), &wsaData); s = socket(AF_INET, SOCK_STREAM, 0); sa.sin_family = AF_INET; sa.sin_port = 0; /* ANY */ // sa.sin_port = htons(12345); /* source port */ sa.sin_addr.s_addr = inet_addr("127.0.0.1"); /* source addr */ bind(s, (struct sockaddr *)&sa, sizeof(sa)); da.sin_family = AF_INET; da.sin_port = htons(80); da.sin_addr.s_addr = inet_addr("127.0.0.1"); connect(s, (struct sockaddr *)&da, sizeof(da)); strcpy_s(buff, "GET / HTTP/1.0\r\n\r\n"); send(s, buff, strlen(buff), 0); while((n = recv(s, buff, sizeof(buff), 0)) > 0) { fwrite(buff, n, 1, stdout); } closesocket(s); WSACleanup();
ありがとうございます。解決しました。また、既成のプログラムを特定のアドレス、インターフェースにアサインすることは可能でしょうか?(2つのネットワークインターフェースがあるとき)