invalid argument при попытке выполнить http запрос. Golang
Есть такой скрипт. Он мне нужен для нагрузочного тестирования:
package main
import (
"fmt"
"log"
"net/http"
"sync"
"time"
"github.com/BurntSushi/toml"
)
type Config struct {
Urls []string `toml:"urls"`
Token string `toml:"token"`
ActiveConnections int `toml:"activeConnections"`
}
func makeRequest(url string, token string) {
client := &http.Client{}
for {
req, err := http.NewRequest("GET", url, nil)
if err != nil {
fmt.Println(err)
return
}
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
t0 := time.Now()
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
} else {
t1 := time.Now()
fmt.Printf("Url: %s. Time: %v. %s\n", url, t1.Sub(t0), resp.Status)
}
}
}
func main() {
http.DefaultClient.Timeout = time.Second * 10
config := Config{}
_, err := toml.DecodeFile("./config.toml", &config)
if err != nil {
log.Fatal(err)
}
var wg sync.WaitGroup
wg.Add(1)
for i := 0; i < config.ActiveConnections; i++ {
for _, url := range config.Urls {
go makeRequest(url, config.Token)
}
}
wg.Wait()
}
Всё что он делает это спамит http запросами на указанные url. Сначала всё работает окей, но через некоторое время в консоли появляется такая ошибка:
Get <my_url>: dial tcp: lookup <my_domain>: invalid argument
<my_url> и <my_domain> я написал вместо реальных значений. Эта ошибка возвращается при client.Do(req). Я не понимаю почему так происходит и что я должен сделать чтобы оно перестало так делать. Я пробовал на 1.15 и 1.16 версии, а также на разных url, проблема воспроизводится везде. Правда иногда раньше, иногда позже. Ubuntu 20.04
Update: Забыл сказать, что эта ошибка сыплется на все запросы после её появления. А если скрипт остановить и сразу же запустить то снова всё ок на какое-то время