知道使用哪个适配器来建立套接字连接

发布于 2024-11-30 19:17:03 字数 325 浏览 0 评论 0原文

我有一个 Visual Studio 2008 C++ 应用程序,我使用套接字连接到远程 TCP 服务器。代码基本上如下所示:

SOCKET s = socket( AF_INET, SOCK_STREAM, 0 );
addrinfo* ai = getaddrinfo( ... );
connect( s, ai->ai_addr, sizeof( sockaddr_in ) );

假设我的本地客户端有多个适配器,我如何判断使用哪个本地接口进行连接?

我意识到我可以使用 bind() 来选择使用的适配器,我很好奇我只是让系统选择的情况。

I have a Visual Studio 2008 C++ application where I connect to a remote TCP server using a socket. The code looks basically like this:

SOCKET s = socket( AF_INET, SOCK_STREAM, 0 );
addrinfo* ai = getaddrinfo( ... );
connect( s, ai->ai_addr, sizeof( sockaddr_in ) );

Assuming my local client has multiple adapters, how can I tell which local interface was used to make the connection?

I realize I can use bind() to pick the adapter used, I'm curious about the case where I just let the system choose.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梅窗月明清似水 2024-12-07 19:17:03

您可以使用 getsockname 查找地址。

int getsockname(
  __in     SOCKET s,
  __out    struct sockaddr *name,
  __inout  int *namelen
);

struct sockaddr_in sin;
int sinlen = sizeof(sin);
memset(&sin, 0, sizeof(sin));

getsockname(s, (strict sockaddr *)&sin, &sinlen);

You can use getsockname to find out the address.

int getsockname(
  __in     SOCKET s,
  __out    struct sockaddr *name,
  __inout  int *namelen
);

struct sockaddr_in sin;
int sinlen = sizeof(sin);
memset(&sin, 0, sizeof(sin));

getsockname(s, (strict sockaddr *)&sin, &sinlen);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文