먼저 Curl_multi_* 일련의 함수의 기본 기능을 간략하게 이해해 봅시다.
curl_multi_init () : 여러 컬 핸들을 관리하기 위해 다중 핸들을 초기화합니다.
curl_multi_add_handle () : 컬 핸들을 다중화 된 핸들에 추가하십시오.
curl_multi_remove_handle () : 다중 핸들에서 컬 핸들을 제거합니다.
curl_multi_exec () : 다중 핸들에 추가 된 모든 요청을 실행합니다.
curl_multi_close () : 멀티플렉싱 핸들을 닫고 리소스를 청소하십시오.
curl_close () : 별도의 컬 세션 핸들을 닫고 핸들과 관련된 모든 리소스를 출시합니다.
curl_multi_remove_handle () : 다중 손잡이에서 컬 핸들을 제거하지만 컬 세션을 직접 닫지는 않습니다. 제거 후 핸들은 유효하며 다른 곳에서 사용하거나 닫을 수 있습니다.
우리는 두 가지를 명확히해야합니다.
curl_multi_remove_handle ()은 세션이 닫히지 않고 멀티플렉싱 핸들입니다 . 이 기능을 호출한다고해서 요청이 종료되지 않으며 CURL 세션과 관련된 리소스를 해제하지도 않습니다.
curl_close ()는 자원을 공개하고 curl_close () 호출하면 관련 컬 핸들이 파괴되므로 핸들이 제거 될 때까지 파괴하고 싶지 않습니다.
이러한 특성에 따라 통화 순서를 분석합니다.
권장 주문입니다. 왜냐하면:
컬 핸들을 제거하면 다중 손잡이에서 분리되지만 세션을 닫지 않습니다. 나중에 핸들에서 다른 작업을 수행 할 수 있습니다 (예 : 로깅 또는 디버깅).
먼저 curl_close ()를 호출하면 세션이 직접 닫히고 나중에 핸들을 작동 할 수 없습니다.
이 순서는 다음과 같습니다.
Curl_Close () 가 호출되면 CURL 세션이 파괴되고 관련 리소스가 릴리스됩니다. 다중 손잡이에서 제거하는 것을 포함하여 더 이상 닫힌 손잡이에 아무것도 할 수 없습니다.
다중 손잡이에서 세션을 제거하더라도 관련 리소스가 컬 내부에 해제되어 예측할 수없는 오류가 발생할 수 있습니다.
따라서이 순서는 프로그램 충돌 또는 정의되지 않은 동작을 유발할 수 있습니다.
표준 프로세스는 다음과 같습니다.
curl_multi_add_handle ()을 사용하여 각 컬 세션을 다중화 된 핸들에 추가하십시오.
curl_multi_exec ()을 호출하여 응답을 실행하고 기다립니다.
curl_multi_remove_handle ()을 사용하여 다중 손잡이에서 완성되거나 더 이상 필요한 컬 세션을 제거하십시오.
마지막으로 Curl_Close () 를 호출하여 각 컬 세션을 닫고 관련 리소스를 해제하십시오.
Curl_Multi_Close ()를 호출하여 다중 손잡이를 닫고 관련 리소스를 해제하십시오.
curl_multi_remove_handle ()은 curl_close () 전에 호출해야합니다. curl_multi_remove_handle () 호출 리소스를 공개하지 않고 멀티플렉스 핸들에서 컬 세션을 제거하므로 핸들을 제거한 후에도 컬 세션을 닫고 리소스를 제거 할 수 있습니다. 먼저 curl_close ()를 호출하지 마십시오. 그렇지 않으면 핸들을 제거 할 수없는 오류가 발생합니다.