개발 기록일지

MultiThread 환경에서 Curl 사용시 문제 본문

프로그래밍/C++ , C

MultiThread 환경에서 Curl 사용시 문제

JuoDev 2021. 4. 28. 10:26

Curl

curl은 오픈 소스로 개발되어 윈도우와 리눅스에 기본 설치되고 있는  웹 개발 툴로써  http, https, ftp, sftps, smtp, telnet 등의 다양한 프로토콜과 Proxy, Header, Cookie 등의 세부 옵션까지 쉽게 설정할 수 있습니다.

 

이러한 장점 때문에 Client를 코딩을 시작하기 전에 curl 명령어로 서버 동작을 먼저 확인함으로써  좀 더 빠르게 개발을 진행할 수 있습니다.

 

출처 : kibua20.tistory.com/148

 

 

 

 

C라이브러리로 curl을 설치해서 사용할 수 가 있는데 libCurl 이라고 부른다

 

라이브러리를 설치하고 헤더에 선언해줌으로써 간단하게 curl 을 통해 url로 요청 및 응답을 구현할 수가 있다

 

 

 

근데 문제는 curl을 사용할때 문제가 있다

 

multithread환경에서 curl 사용시 

curl_easy_perform() failed: Couldn't resolve host name

 

이런식으로 curl을 사용한 소스가 죽어버린다..

 

나의 경우 어떤환경이냐면 main 소스가 실행되면 여러개의 thread가 동작을 한다

특정 폴더의 파일을 감시하는 thread, 특정 폴더에 파일이 있으면 다른 폴더로 이동시키는 thread 등등...

 

thread 들이 돌고 있고 curl로 통신을 하는 함수가 호출되면 소스가 죽어버리는 것이다..

 

그래서 찾아보니까 mulitithread환경에서는 제대로 작동하지 않는다는 내용이 여기저기~

 

 

 

  • CURLOPT_NOSIGNAL 옵션을 1로 설정하여 SIGALRM 발생시키지 않도록 변경
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);

출처:behonestar.tistory.com/82

 

 

이렇게 해봤는데도 안되더라...

뭐 내가 뭘 놓치고 있는 것 같기도 한데 해결이 되지 않았다

 

근데 개발 기간도 정해져있고 내용도 많이 나오지 않아서 다른 노선을 택했다

구글링을 해도 찾기 어려운게 있고 내용이 부족한 것들이 있다. 그럴때는 아에 다른 방법을 찾는것도 방법이었다.

 

MS에서 만든 cpprestsdk(코드명:Casablanca) 을 사용하는 방법이었다

 

이건 다음시간에...

 

'프로그래밍 > C++ , C' 카테고리의 다른 글

c에서 Json 파싱하기 json-c  (0) 2020.07.07