我試圖獲取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