curl-library
libcurl in Team Fortress 2
Date: Thu, 30 Jun 2011 01:43:21 +0000
Hi all,
We are using libcurl on the server-side for the TF2 replay system, and could use some help diagnosing some problems.
Without getting into too much detail<http://forums.steampowered.com/forums/showthread.php?p=22333197#post22333197>, the gist of the system is that replay-enabled servers use libcurl (7.21.2) to offload small chunks of data over FTP, every 15 seconds or so. Clients can then get at the data over HTTP.
One of the biggest issues server operators are running into is that things will be going along smoothly with no issues - uploading these chunks of data successfully - and then suddenly libcurl will error out with a "Couldn't resolve host name" message. Anyone have any clue what could be causing this?
I've pasted a simplified version of the uploading code below in case that's useful.
Thanks a bunch.
-Jon
--
size_t CFtp::ReadCallback( void *pDst, size_t nSize, size_t nCount, void *pStream )
{
return fread( pDst, nSize, nCount, (FILE *)pStream );
}
bool CFtp::Go()
{
// Get a curl handle
CURL *pCurl = curl_easy_init();
if ( !pCurl )
{
return false;
}
Assert( m_szRemotePath[0] == '/' );
CFmtStr fmtURL(
"ftp://%s:%i%s%s%s",
m_szHostname, m_nPort, m_szRemotePath, V_strlen( m_szRemotePath ) == 1 ? "" : "/",
FTP_GetFilename()
);
CFmtStr fmtLogin( "%s:%s", m_szLogin, m_szPassword );
// Set up parameters
curl_easy_setopt( pCurl, CURLOPT_URL, fmtURL.Access() ); // URL
curl_easy_setopt( pCurl, CURLOPT_USERPWD, fmtLogin.Access() ); // Username:password
// Get size of local file
curl_off_t nSrcFileSize = g_pFullFileSystem->Size( m_szLocalFile );
if( !nSrcFileSize )
{
return false;
}
// Open the local file
m_pSrcFile = (void *)fopen( m_szLocalFile, "rb" );
if ( !m_pSrcFile )
{
return false;
}
// Set up parameters
curl_easy_setopt( pCurl, CURLOPT_READFUNCTION, CFtp::ReadCallback ); // Specify our read function
curl_easy_setopt( pCurl, CURLOPT_UPLOAD, 1L ); // Enable uploading
curl_easy_setopt( pCurl, CURLOPT_READDATA, (FILE *)m_pSrcFile ); // Specify file to upload
curl_easy_setopt( pCurl, CURLOPT_INFILESIZE_LARGE, ( curl_off_t )nSrcFileSize ); // File size (optional)
// Go!
CURLcode nResult = curl_easy_perform( pCurl );
// Cleanup
curl_easy_cleanup( pCurl );
return nResult == CURLE_OK;
}
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html
Received on 2011-06-30