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

Posted

技术标签:

【中文标题】知道哪个适配器用于建立套接字连接【英文标题】:knowing which adapter is used to make a socket connection 【发布时间】:2011-08-18 18:03:38 【问题描述】:

我有一个 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() 来选择使用的适配器,我很好奇我只是让系统选择的情况。

【问题讨论】:

【参考方案1】:

您可以使用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);

【讨论】:

以上是关于知道哪个适配器用于建立套接字连接的主要内容,如果未能解决你的问题,请参考以下文章

通过 WCF 的套接字连接协议 net.tcp 的问题

IOException:网络适配器无法建立连接[重复]

随机获取“IO错误:网络适配器无法建立连接”[重复]

java.sql.SQLRecoverableException:网络适配器无法建立连接

Oracle 11g DBCP 网络适配器无法建立连接

从recyclerview中删除项目(viewholder具有onClick但适配器具有数据集)