Я тоже оказался в числе счастливчиков со своим многопоточным скриптом, которые получали данную ошибку и не только ее. При HTTP запросах вылетают также такие ошибки:
Error: read ECONNRESET
Еще вот такая
Error: 7096:error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:677:
По поводу последней ошибки на форумах пишут о конфликте протоколов SSL и TLS и/или их версий. Пишут, что нужно дать приоритет TLSv1. Также были подозрения на стабильность соединения, антивирус.
@atomexpert said in "getaddrinfo () thread failed to start":
@atomexpert Перед запросом поставил задержку от 500 до 1000 мск и все ошибки пропали.
Мне также пришла идея использовать задержку, но в твоем случае если скрипт работает достаточно долго или имеет большое число потоков, то это рано или поздно все равно может привести к ошибке (по теории вероятности). И в этом случае лучше сделать задержку через привязку к номеру потока, например:
номер потока * 100мс
Так все запросы будут выполняться строго последовательно.
Насколько я понял, у HTTP запросов есть одна проблема - привязка ответа к конкретному запросу происходит только по времени - по времени, когда открыт сокет. Если мы делаем одновременно много запросов на один адрес, то клиент может не понять какой ответ принадлежит какому запросу и я получил этому подтвержение на собственном опыте, работая в БАС.
У меня скрипт работал в 13 потоков и в каждом потоке я одновременно делал абсолютно один и тот же запрос и должен был получать один и тот же ответ в формате json, примерно такой:
{[данные1],[данные2],[данные3]}
Но в некоторых потоках я обнаружил что данные являются не полными, либо излишними, т.е. вот так:
поток 1: {[данные1],[данные2],[данные3],[данные1]}
поток 2: {[данные1],[данные2]}