일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- c드라이브에서 압축
- PostgreSQL
- LV1
- Docker
- 로또의 최고 순위와 처저 순위
- 2022 KAKAO BLIND RECRUITMENT
- 파일이 너무 커서 안들어감
- 특정ip차단
- 데이터넘기기
- db
- 신고결과받기
- Linux
- 특정ip접근
- c드라이브에서 압축 안될때
- usb 공간있는데
- maven-install
- 압축권한
- ipv6->ipv4
- 관리자권한 문제
- 프로그래머스
- 도커
- 팰린드롬개수
- on conflict
- usb 포맷시스템
- programmers
- java
- 방화벽정책
- 폴더압축 권한문제
- 6tunnel
- mybatis
- Today
- Total
개발 기록일지
MultiThread 환경에서 Curl 사용시 문제 본문
Curl
curl은 오픈 소스로 개발되어 윈도우와 리눅스에 기본 설치되고 있는 웹 개발 툴로써 http, https, ftp, sftps, smtp, telnet 등의 다양한 프로토콜과 Proxy, Header, Cookie 등의 세부 옵션까지 쉽게 설정할 수 있습니다.
이러한 장점 때문에 Client를 코딩을 시작하기 전에 curl 명령어로 서버 동작을 먼저 확인함으로써 좀 더 빠르게 개발을 진행할 수 있습니다.
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);
이렇게 해봤는데도 안되더라...
뭐 내가 뭘 놓치고 있는 것 같기도 한데 해결이 되지 않았다
근데 개발 기간도 정해져있고 내용도 많이 나오지 않아서 다른 노선을 택했다
구글링을 해도 찾기 어려운게 있고 내용이 부족한 것들이 있다. 그럴때는 아에 다른 방법을 찾는것도 방법이었다.
MS에서 만든 cpprestsdk(코드명:Casablanca) 을 사용하는 방법이었다
이건 다음시간에...
'프로그래밍 > C++ , C' 카테고리의 다른 글
c에서 Json 파싱하기 json-c (0) | 2020.07.07 |
---|