2011-10-26 14 views
2

我可以使用2种不同的静态IP(IPv4)中的任何一种来访问我的网站。特定IP上的C开放套接字

是否可以打开到另一台服务器的TCP连接,指定要使用哪两个IP作为返回地址?

XXXX(我的服务器)=> ZZZZ(目的地服务器)
YYYY(我的服务器)=> ZZZZ在该示例(目的地服务器)

查错等已为简单起见缘故省略:

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); 

回答

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

不知道,但你不能bind您的插座到本地的一个地址,你之前连接?在这种情况下,您可以选择将哪些IP用于连接。

相关问题