Как я могу проверить, заблокируется ли чтение из сокета tcp? - PullRequest
0 голосов
/ 31 августа 2018

Если у меня tcp-соединение conn, как определить, будет ли conn.Read блокироваться?

Насколько я понимаю, приложение Go's Read использует неблокирующие сокеты и будет блокировать только при отсутствии доступных для чтения данных (см. https://stackoverflow.com/a/36117724/4447365).

Но есть ли способ проверить, нет ли в сокете данных?

Это можно сделать с помощью функции чтения POSIX , вызвав ее с аргументом count, равным нулю.

1 Ответ

0 голосов
/ 31 августа 2018

При программировании на Go не беспокойтесь об этом. Предположим, все будет заблокировано. Затем поместите его в программу, чтобы она все равно работала асинхронно.

Среда выполнения Go обрабатывает все детали.

Кроме того, проблема здесь , кажется, то, что вы хотите сделать. Проблема была отклонена: Go не делает этого. Как и С. И даже если это было сделано, это не надежно. Если вы дочитали до конца, есть предложения по настройке Linger TCP.

...