2013-06-11 72 views
0

因此很明顯的ioctl()的Winsock2的等價物,這是ioctlsocket()WSAIoctl(),不接受ifreq結構作爲參數或具有用於插座連接到一個接口的明確的選擇。我在寫一個使用ISATAP隧道的p2p IM程序。我使用netsh啓用ISATAP隧道接口,但不知道如何發出命令WSAIoctl()將套接字設置爲IPv6 ISATAP隧道接口。接口IOCTL在Winsock2的:幫助需要

+0

哪個'ioctl()'操作是你試圖完全移植到WinSock的? WinSock有可能擁有它們自己的等價物。 –

+0

我正在嘗試移植SIOCADDTUNNEL。我在Win8 powershell上使用了ipconfig命令,並啓用了isatap適配器接口,但我不確定如何將套接字與該特定接口相關聯。 –

回答

1

不要忘了WinSock套接字可以通過bind()綁定到特定的接口,也可以通過setsockopt()進行配置。舉例來說,有一個ip_mreq結構(用於IP_ADD_MEMBERSHIPIP_DROP_MEMBERSHIP插座選項中所定義),和一個ip_mreq_source結構(用於IP_ADD_SOURCE_MEMBERSHIPIP_DROP_SOURCE_MEMBERSHIPIP_BLOCK_SOURCE限定,並且IP_UNBLOCK_SOURCE套接字選項),其包含接口相關的字段。

+0

bind()函數將套接字綁定到IP地址。在Linux套接字中,可以使用setsockopt()和ioctl()將套接字與特定的適配器網絡接口相關聯。 Windows似乎讓這個過程更加棘手。 –

+0

WinSock不像其他平臺那樣區分適配器和IP地址。由於無論如何都會爲適配器分配IP,因此將套接字綁定到IP也會將其綁定到分配了IP的適配器。但是,有API用於獲取適配器接口信息,而某些套接字操作(如多播)則使用適配器接口。 –