Создаю в потоке QThread несколько объектов QNetworkAccessManager и замечаю, что ОС создает отдельный поток для каждого объекта который создал сетевое соединение. Собираю на Qt-5.14.2, gcc 5.3.1 64x.
Я что-то делаю не так или это такая ассинхронность под капотом Qt?
Примерно на 3-10-й итерации цикла popen прилетает SICHLD и wait входит в ожидание. Если я не делаю execl(...) в форке, то wait ведет себя нормально.
Вместо wait стал использовать
waitpid(-1, &status, WNOHANG);
и в случае если прилетит sigchld, а никакой процесс не помер, то waitpid не впадет в ожидание.
Откуда SIGCHLD если никакой процесс не умер и почему это случается когда использую fork() до popen?
Иногда (прямо сейчас) приходится обрабатыавть строки на C. Меня коробит от громоздкости операций выделения памяти, конкатенации и самое главное это snprintf с проблемой размера буфера под конечную строку, гигантское поле для выращивания вских мемориликов по невнимательности.
К примеру, размеры mult1_str, mult2_str и equal_str известны, нужно выделить память под всю строку:
варианты:
- махнуть шашкой и сделать килобайт на стеке ( ((( )
- ничем не размахивать и посчитать руками. (еще хуже)
- написать функцию которая будет вычислять длину «%s miltilple %s equals %s» без символов подстановки (уже лучше)
- отказаться от snprintf и собирать строку пачкой конкатенаций с аллокациями памяти и прочим...
In function `test':
curl-test-1.c:(.text+0x105): undefined reference to `curl_easy_init'
curl-test-1.c:(.text+0x12a): undefined reference to `curl_easy_setopt'
curl-test-1.c:(.text+0x14c): undefined reference to `curl_easy_setopt'
curl-test-1.c:(.text+0x16e): undefined reference to `curl_easy_setopt'
curl-test-1.c:(.text+0x192): undefined reference to `curl_easy_setopt'
curl-test-1.c:(.text+0x19e): undefined reference to `curl_easy_perform'
curl-test-1.c:(.text+0x1b1): undefined reference to `curl_easy_strerror'
curl-test-1.c:(.text+0x1bd): undefined reference to `curl_easy_cleanup'
/tmp/ccxVQLrA.o: In function `main':
curl-test-1.c:(.text+0x1db): undefined reference to `curl_global_init'
collect2: error: ld returned 1 exit status
Голову ломаю и не пойму, ведь все библиотеки нормально собрались. Почему не видит статическую библиотеку?
Хочу впилить в свой сишный код уже готовый фрагмент кода и запустить его в другом процессе. Код определяет и использует свои глобальные переменные, нигде кроме как в этом коде они не используются.
Это безопасно?
Сделал пачку потоков в которых забирал файлы по https
Заметил что сильно отъедает память
Для проверки сделал тестовый кусок кода, поднял апач и в цикле забирал один и тот же файл:
Вскоре после запуска наблюдаем увеличение отъедаемой памяти. На гитхабе были какие-то разговоры про подобное, но решение не засветили. Специально использовал NSS потомучто на офсайте curl сказано что он потокобезопасный, а OpenSSL не всех версий. Проблема наблюдается только при работе по HTTPS. Это на стретче 64х,
Выбираю асихронный днс-резолвер для работы с libevent.
Тот что изкоробки не подходит потому что не работает с произвольными типами записей.
Рассматривал c-ares, но после просмотра документации и беглого осмотра кода посчитал что для работы с мультиплексирующими библиотеками он не подходит, автор немного увлекся select'ом и разнообразными FD_SET.
Остановился на udns: http://www.corpit.ru/mjt/udns.html, он же есть в стретче. Смущает то что код давно не обновлялся и скудная документация, но это компенсирует хороший говорящий код.
Хочу мультиплексировать libevent'ом в нескольких потоках. В документации сказано о потокобезопасности для случая когда несколько потоков работают с одним и тем же циклом обработки событий, а про потокобезопасность изолированных в разных потоках event_base и работу с OpenSSL не нашел.
На работе создали типа корпоративной почты и выдали мыло с паролем. Когда настал момент забрать почту, я понял что не знаю как войти в ящик. Как выяснилось, у меня небыло адреса smtp-сервера.
Гугление и перебор субдоменов smtp и smtps ничего не дало. Тогда я открыл для себя RFC5321. В нем было все, даже то что MX-запись содержит домен на котором сервис принимает почту от других серверов, но не про то куда подключиться пользователю.
Стандаризированный способ узнать адрес smtp-сервера для подключения пользователей существует?
ЗЫ
Поправлю что нужен и IMAP/POP3 и SMTP. Имею представление что для чего