I have a program that downloads files from the web (automatically) and stores them. I do the downloading with the code below (give to me by someone else on this board!) and it works great... for no reason at all - sometimes the downloads just seem like they don't even try to DL and my program just goes through page after page (kinda like it runs away). Since these are compiled instances I can't see what's wrong... I'm trying to test it in the development environment to see what's up but it's not recreating the problem.

I am on a cable modem and I have multiple instances of the software working... it'll work fine (sometimes hours after starting, and others just minutes after starting) and then the program will just start running away and going through pages it needs to download... acting like they downloaded but they definately didn't.

I know I have give nothing to base a hypothesis of what's wrong on, but I was jsut wondering if anyone knows of an inherit problem with this code, something that the cable modem/ISP could do to trigger this behavior, or something I might be doing wrong that could cause this.

Thanks

VB Code:
  1. 'downloading for the 'download' bit
  2. Option Explicit
  3.  
  4. Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
  5. Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
  6. Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
  7. Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
  8.  
  9. Private Const IF_FROM_CACHE = &H1000000
  10. Private Const IF_MAKE_PERSISTENT = &H2000000
  11. Private Const IF_NO_CACHE_WRITE = &H4000000
  12.        
  13. Private Const BUFFER_LEN = 256
  14. Dim source As String
  15.  
  16. Public Function GetURLSource(sURL As String)
  17. On Error GoTo ErrorHandler
  18.  
  19.     Dim sBuffer As String * BUFFER_LEN, iResult As Integer, sData As String
  20.     Dim hInternet As Long, hSession As Long, lReturn As Long
  21.  
  22.     hSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
  23.     If hSession Then hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
  24.  
  25.     If hInternet Then
  26.         iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
  27.         sData = sBuffer
  28.         Do While lReturn <> 0
  29.             iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
  30.             sData = sData + Mid(sBuffer, 1, lReturn)
  31.         Loop
  32.     End If
  33.    
  34.     iResult = InternetCloseHandle(hInternet)
  35.  
  36.     GetURLSource = sData
  37.  
  38. Exit Function
  39. ErrorHandler:
  40. 'MsgBox "Sub/Function: GetURLSource" & vbCrLf & vbCrLf & "Encountered error #" & Err.Number & vbCrLf & Err.Description
  41. Resume Next
  42. End Function

PS: When I unplug my ethernet cable they all 'wait' and stop where they are... then when I plug it back in they resume... this is a great feature but it means that it isn't because the internet connection might be lost or timeout.