【问题标题】:Interface IOCTL in winsock2: Help neededwinsock2 中的接口 IOCTL:需要帮助
【发布时间】:2013-06-07 23:34:25
【问题描述】:

显然,ioctl() 的 Winsock2 等效项,即 ioctlsocket()WSAIoctl(),不接受 ifreq 结构作为参数或具有将套接字附加到接口的明确选项。我正在编写一个使用 ISATAP 隧道的 p2p IM 程序。我使用 netsh 启用 ISATAP 隧道接口,但不知道如何向WSAIoctl() 发出命令以将套接字设置为 IPv6 ISATAP 隧道接口。

【问题讨论】:

  • 您想将哪个ioctl() 操作准确地移植到WinSock? WinSock 可能有自己的等价物。
  • 我正在尝试移植 SIOCADDTUNNEL。我在 Win8 powershell 上使用了 ipconfig 命令并启用了 isatap 适配器接口,但我不确定如何将套接字与该特定接口相关联。

标签: sockets network-programming tunneling


【解决方案1】:

不要忘记 WinSock 套接字可以通过bind() 绑定到特定接口,也可以通过setsockopt() 进行配置。例如,有一个ip_mreq 结构(为IP_ADD_MEMBERSHIPIP_DROP_MEMBERSHIP 套接字选项定义)和一个ip_mreq_source 结构(为IP_ADD_SOURCE_MEMBERSHIPIP_DROP_SOURCE_MEMBERSHIPIP_BLOCK_SOURCE 和@987654330 定义@socket options),包含接口相关的字段。

【讨论】:

  • bind() 函数将套接字绑定到 IP 地址。在 Linux 套接字中,setsockopt() 和 ioctl() 可用于将套接字与特定的适配器网络接口相关联。 Windows 似乎使这个过程变得更加棘手。
  • WinSock 不像其他平台那样区分适配器和 IP 地址。由于无论如何都会为适配器分配 IP,因此将套接字绑定到 IP 也会将其绑定到分配 IP 的适配器。但是,有一些 API 用于获取适配器接口信息,并且一些套接字操作(如多播)确实使用了适配器接口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多