curl을 사용하면 가벼운 프로그램을 제외하고 대부분은 multi thread 기반의 설계를 할 것입니다.
curl 라이브러리는 기본적으로 thread safe에 대해서 보장을 해주지 않을 수 있습니다.
정확하게 원인을 파악해보지는 않았지만, curl은 multi thread로 동작하게 되면 비슷한 에러가 발생하는 경우가 많았습니다.
여러 쓰레드에서 동일한 핸들을 사용할 경우에 이러한 문제가 발생하는 경우가 많습니다.
lock, unlock을 사용할 수 있지만, 그에 대한 성능이 떨어질 수 밖에 없습니다.
물론 발생을 안하는 경우가 있지만, 한번씩 발생하는 에러를 막기 위해서는 그에 대한 설정이 필요합니다.
바로 CURL의 NOSIGNAL 옵션입니다.
curl 사이트에도 나와있듯이, 모든 signal을 건너띄게 됩니다.
signal에 의하여 문제가 생겨 segmentfault가 발생할 수 있기때문에, signal을 건너뛰게되면 당장은 문제를 해결할 수 있습니다.
사용법은 아래와 같습니다.
----------------------------------------------------------------------------------------------------
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
----------------------------------------------------------------------------------------------------
제 기준에서는 curl을 사용할 경우, 안전성을 위해서 위의 옵션을 무조건 사용한다라고 생각하시면 될 것같습니다.
'프로그래밍 > C' 카테고리의 다른 글
[C] socket 함수 Operation not permitted 에러 (0) | 2024.08.22 |
---|---|
[C] 리눅스에서 ctag로 하위디렉토리 까지 검색하는 방법 (0) | 2024.02.13 |
[C] 디렉토리 검색 함수 scandir (0) | 2023.06.29 |
[C] 문자열에서 CRLF 찾는 방법 (0) | 2023.03.30 |
[C] memcpy vs sprintf 차이? (0) | 2023.03.08 |