From: [email protected]
Date: Wed, 6 Jun 2012 01:39:36 +0300
Subject: Re: Disconnection occurs without any error returned
To: [email protected]


A code sample would help

On Wed, Jun 6, 2012 at 12:21 AM, Fadi Kahhaleh <[email protected]> wrote:






Hi all,
 
I am running into a very strange problem that is causing me to go into circles!
Using LibCurl has been a great experience over all as it is very flexible and 
easy to use.
 
Now I am running into some issues and it is driving me crazy, one of them which 
could be libCURL 


related or not (hoping that you guys would be able to shed some light on) is 
the following:
 
I am downloading a video stream from one of our servers and I am getting a 
close connection debug info with curl Return Code of 0 (ZERO)


for no reason after running for several hours. (this could be 3 hours, 9 hours, 
and have seen it go to 16 and 24 hours!)
 
What is the best way to go about debugging this issue?
if I use VLC, it runs perfectly without problems for 24+ hours and all is good, 
so it is not the source.


 
I have defined the callback function and I did notice that there is an 8-byte 
memory leak in there, can't be sure if it is internal or my code, but
i doubt it has something to do with this issue, and will try to iron it out 
later once I settle this.



Thanks
 
Fadi

                                          

-------------------------------------------------------------------

List admin: http://cool.haxx.se/list/listinfo/curl-library

Etiquette:  http://curl.haxx.se/mail/etiquette.html
I have based off the inmemory sample code, here is the two methods, not sure 
how much of help it will be! size_t AVStreamer::DownloadCallback(void 
*contents, size_t size, size_t nmemb, void *userp)
{
  size_t realsize = size * nmemb;
 AVStreamer *vs = (AVStreamer*)userp;
 int byteCnt = 0;
 static int timerCount = 0;
 do
 {
  if(WaitForSingleObject(vs->mre_DecoderExit,0) == WAIT_OBJECT_0)
  {
   //we have to exit!   AVStreamer::PrintError(L"Exiting CallBack function for 
CURL due to mre_DecoderExit\r\n");
   return 0;
  }  WaitForSingleObject(vs->hMux,INFINITE);
  
  byteCnt = vs->ringBuf.GetWriteAvail();
  ReleaseMutex(vs->hMux);
  Sleep(10);
   }
 while(byteCnt < realsize);  
 WaitForSingleObject(vs->hMux,INFINITE);
 byteCnt = vs->ringBuf.Write((byte*)contents,realsize);   
 ReleaseSemaphore(vs->hSemaphore,1, NULL);
 ReleaseMutex(vs->hMux);
 return realsize;
} WORD AVStreamer::StreamURL(void *arg)
{
 AVStreamer *locals = (AVStreamer*)arg;
 CURL *curl_handle;
 CURLcode ret;
 curl_global_init(CURL_GLOBAL_WIN32);
 //curl_global_init(CURL_GLOBAL_ALL);
  
 /* init the curl session */ 
 curl_handle = curl_easy_init();
 
 curl_easy_setopt(curl_handle, CURLOPT_DEBUGFUNCTION,curl_debug_callback);
 curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, TRUE); 
 
 /* specify URL to get */ 
 curl_easy_setopt(curl_handle, CURLOPT_URL, locals->filename);
 
  /* send all data to this function  */ 
  curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, DownloadCallback);
  /* we pass our 'chunk' struct to the callback function */ 
  curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)locals);
   
 /* some servers don't like requests that are made without a user-agent
     field, so we provide one */ 
 curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
 
 /* get it! */ 
 ret = curl_easy_perform(curl_handle); 
 AVStreamer::PrintError(L"Exited from CURL completely with return value: 
%i\r\n",ret);  /* cleanup curl stuff */ 
 curl_easy_cleanup(curl_handle);    /* we're done with libcurl, so clean it up 
*/ 
 curl_global_cleanup();
 return 0;
} 

                                          
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to