2011-10-26 41 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用於連接。

相關問題