首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C在特定IP上打开套接字

C在特定IP上打开套接字
EN

Stack Overflow用户
提问于 2011-10-26 19:26:04
回答 2查看 7.1K关注 0票数 2

我的网站可以使用2个不同的静态IP (IPv4)中的任何一个访问。

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

X.x(我的服务器) => Z.Z(目标服务器)

Y.Y(我的服务器) => Z.Z(目标服务器)

为了简单起见,省略了本例中的错误检查等:

代码语言:javascript
运行
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-26 20:01:45

就像@hochl所说的,你可以使用bind系统调用:

代码语言:javascript
运行
复制
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_pton,通常不鼓励使用inet_aton

票数 6
EN

Stack Overflow用户

发布于 2011-10-26 19:33:34

不确定,但是你不能在连接之前将你的套接字bind到你的本地地址吗?在这种情况下,您可以选择您的is用于连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7901945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档