BUG描述:当网络正常的时候可以正常请求,但是当网络不正常的时候,CCHttpClient的线程体过一段时间会崩溃掉。
原因:libcurl 中设置了CURLOPT_CONNECTTIMEOUT,它会产生一个信号量,它打断了CCHttpClient线程体中的sem_wait,然后导致整个程序崩溃。
libcurl使用alarm来实现超时的判断,在多线程环境里,alarm产生的信号会打断一切主循环,然后导致非常难以察觉的Bug。
解决方法:把CURLOPT_NOSIGNAL设为1就行了,这样libcurl将不会产生任何信号。
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTNOSIGNAL