как установить функцию SetDeadline на DialTCP и обработать ошибку тайм-аута - PullRequest
1 голос
/ 21 апреля 2020

Я создаю TCP-соединение с сервером, но мне нужно указать тайм-аут.

Как мне добиться этого?

Это упрощенный код:

tcpserveraddr, err := net.ResolveTCPAddr("tcp", Serveraddr+":"+Serverport)
if err != nil {
    log.Printf("error during address relolution: %v\n", err)
}
serversocket, err := net.DialTCP("tcp", nil, tcpserveraddr)
if err != nil {
    log.Printf("error during serversocket.DialTCP(): %v\n", err)
}

1 Ответ

1 голос
/ 21 апреля 2020

Самый простой вариант - использовать net.DialTimeout():

net.DialTimeout(tcpserveraddr.Network(), tcpserveraddr.String(), 5*time.Second)

Что вы также можете сделать, это создать net.Dialer, который дает Вы больше контролируете параметры набора, а затем используете DialContext() в своем собственном контексте (с таймаутом):

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
var d net.Dialer
d.DialContext(ctx, tcpserveraddr.Network(), tcpserveraddr.String())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...