2
我是一個新手去語言。我打算使用go語言來開發一個http客戶機/服務器。 在瀏覽http客戶端軟件包中支持的功能列表時,我找不到在套餐中設置套接字選項的方法 (可能我只是不知道如何使用它)。在調用http客戶端連接之前,我需要在fd中設置DSCP選項(IP_TOS)。 (儘管我發現設置套接字選項的系統調用選項,但我沒有找到從http包獲取fd的方法)。如何使用go語言爲http客戶端設置套接字選項(IP_TOS)?
在http服務器端中,能夠設置套接字選項(IP_TOS)。 代碼摘錄:
tcpListener,err := net.ListenTCP("tcp4", addr)
if err != nil {
//fmt.Println("error in listen", err.error())
log.Fatal("net.ListenTCP()", err)
}
//get lisenet socket fd
f, _ := tcpListener.File()
err = syscall.SetsockoptInt(int(f.Fd()), syscall.SOL_SOCKET, syscall.IP_TOS, 128)
在HTTP客戶端,沒能得到套接字fd並設置套接字選項(IP_TOS): (我想打電話NewRequest之前設置IP_TOS)
client := &http.Client{
Transport : tr,
//Timeout: time.Duration(10) * time.Second,
}
request, err := http.NewRequest("POST", url, body)
if err != nil {
panic(err)
}
response, err := client.Do(request)
謝謝!
感謝您的詳細回覆。我已經通過示例程序測試了上面的代碼,但socket客戶端IP_TOS值無法在從http客戶端發起的syn分組中設置。在這裏,我有一個疑問,同時將參數傳遞給DialContext(ctx,network,addr),如何創建上下文以ctx的形式傳遞。目前我使用** DialContext(context.Background()網絡,地址)**? –
@ManojSaha請參閱編輯並嘗試。無論它是否有效,您都可能想要在Go問題跟蹤器上請求一項功能,以某種方式允許FD上的設置選項。 –
再次感謝您的努力!我在示例程序中進行了測試,爲api設置了dscp設置是成功的,我可以通過獲取dscp的api來讀取dscp值,但它並不反映在syn包中的tcp連接請求中。我仍然看到dscp是0。 –