可以使用2种不同的静态IP(IPv4)访问我的网站。
是否可以打开到另一台服务器的TCP连接,指定哪两个IP用作返回地址?
x.x.x.x(我的服务器)=> z.z.z.z(目的地服务器)
y.y.y.y(我的服务器)=> z.z.z.z(目标服务器)
为简单起见,省略了此示例中的错误检查等:
struct addrinfo hints, *result;
hints.ai_flags = 0;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_addrlen = 0;
hints.ai_canonname = NULL;
hints.ai_addr = NULL;
hints.ai_next = NULL;
getaddrinfo(domain, "80", &hints, &result);
socket(result->ai_family, result->ai_socktype, result->ai_protocol);
答案 0 :(得分:6)
像@hochl所说,你使用bind
系统调用:
struct sockaddr_in sin = { 0 };
int sock;
/* Create a socket address, with a specific port and (local) ipnumber */
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
inet_aton("1.2.3.4", &sin.sin_addr);
/* Create socket */
sock = socket(AF_INET, SOCK_STREAM, 0);
/* Bind socket to the local address */
bind(sock, (struct sockaddr *) &sin, sizeof(sin));
/* Now connect to remote server... */
/* connect(...) */
应该注意,通常不鼓励使用inet_aton
,而是inet_pton
。
答案 1 :(得分:1)
不确定,但是在连接之前,你不能将bind
套接字连接到本地地址吗?在这种情况下,您可以选择使用哪个IP进行连接。