我试图获取net/http请求的套接字id/fd,以便我可以将它与syscall.Bind )将套接字绑定到我的许多公用传出IPV4地址之一。Google Go Lang - 获取net/http的socket id/fd以与syscall一起使用。绑定
我希望能够选择哪个IP地址用于传出请求。这是用于Windows的。
任何帮助,非常感谢。
下面是一些用于linux的代码,但我需要得到http.Client的套接字fd而不是net.Conn。
func bindToIf(conn net.Conn, interfaceName string) {
ptrVal := reflect.ValueOf(conn)
val := reflect.Indirect(ptrVal)
//next line will get you the net.netFD
fdmember := val.FieldByName("fd")
val1 := reflect.Indirect(fdmember)
netFdPtr := val1.FieldByName("sysfd")
fd := int(netFdPtr.Int())
//fd now has the actual fd for the socket
err := syscall.SetsockoptString(fd, syscall.SOL_SOCKET,
syscall.SO_BINDTODEVICE, interfaceName)
if err != nil {
log.Fatal(err)
}
}
非常感谢@zmb您的回答非常完美,并带领我解决问题的权利。虽然我不得不将http.DefaultTransport.Dial更改为http.DefaultTransport。(* http.Transport).Dial – user3284667 2015-02-25 01:13:32
完成。再次感谢! – user3284667 2015-02-26 13:44:42