Код: Выделить всё
dial unix <путь к сокету>: connect: resource temporarily unavailable
Какой ещё кеш имеется в виду? И в нём ли дело? Что можно подкрутить в системе (коя linux, если это важно)?EAGAIN Insufficient entries in the routing cache.
Модератор: Модераторы разделов
Код: Выделить всё
dial unix <путь к сокету>: connect: resource temporarily unavailable
Какой ещё кеш имеется в виду? И в нём ли дело? Что можно подкрутить в системе (коя linux, если это важно)?EAGAIN Insufficient entries in the routing cache.
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Код: Выделить всё
23664 socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 1167
23664 connect(1167, {sa_family=AF_UNIX, sun_path="<путь к сокету>"}, 16) = -1 EAGAIN (Ресурс временно недоступен)
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
У меня написано по-другому (Linux man-pages 5.08):Bizdelnick писал: ↑03.12.2020 16:54В мане connect(2) написано по этому поводу совсем немного:EAGAIN Insufficient entries in the routing cache.
И судя по логу strace, здесь именно неблокирующий unix-сокет.EAGAIN For nonblocking UNIX domain sockets, the socket is nonblocking, and the connection cannot be completed immediately. For other socket families, there are insufficient entries in the routing cache.
Это выглядит более разумно, но всё-таки не проясняет причину ошибки. Можно ли что-то с этим сделать на стороне клиента, сервера или ОС? (Ну кроме очевидного «использовать блокирующие сокеты»: я не готов переписывать половину стандартной библиотеки go, да и вряд ли это вообще возможно.)/dev/random писал: ↑04.12.2020 03:40the socket is nonblocking, and the connection cannot be completed immediately
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Обычно это происходит, если очередь установленных через connect(), но не принятых через accept() соединений заполнена. Размер очереди указывается в listen(). Максимальный размер, до которого обрезается указанный в listen() параметр - в sysctl net.core.somaxconn. Если нет возможности повлиять на то, как Go реагирует на EAGAIN, можно попробовать увеличить эту очередь.Bizdelnick писал: ↑04.12.2020 16:48Это выглядит более разумно, но всё-таки не проясняет причину ошибки. Можно ли что-то с этим сделать на стороне клиента, сервера или ОС? (Ну кроме очевидного «использовать блокирующие сокеты»: я не готов переписывать половину стандартной библиотеки go, да и вряд ли это вообще возможно.)
В этой статье объясняют причину так:Bizdelnick писал: ↑04.12.2020 16:48Это выглядит более разумно, но всё-таки не проясняет причину ошибки. Можно ли что-то с этим сделать на стороне клиента, сервера или ОС? (Ну кроме очевидного «использовать блокирующие сокеты»: я не готов переписывать половину стандартной библиотеки go, да и вряд ли это вообще возможно.)/dev/random писал: ↑04.12.2020 03:40the socket is nonblocking, and the connection cannot be completed immediately
и советуют использовать поллинг, чтобыInstead of blocking, a call to read() on an empty pipe or write() to a full pipe will return an EAGAIN error. This is a nice way of saying the pipe is not ready for that action (the error message might look like resource temporarily unavailable). EAGAIN really means “try again”, there is an alias for this error called EWOULDBLOCK.
to be notified of when the pipe is ready for read or write (depending on what you need).
О, спасибо! Придётся, правда, покопаться, чтобы найти, где это зарыто в asio, но хотя бы направление понятно./dev/random писал: ↑04.12.2020 18:13Обычно это происходит, если очередь установленных через connect(), но не принятых через accept() соединений заполнена. Размер очереди указывается в listen(). Максимальный размер, до которого обрезается указанный в listen() параметр - в sysctl net.core.somaxconn. Если нет возможности повлиять на то, как Go реагирует на EAGAIN, можно попробовать увеличить эту очередь.
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |