Sign in to follow this  
Followers 0
Spyderco

Timeout for current action.

7 posts in this topic

#1 ·  Posted (edited)

Hi everyone ;)

I'll explain what I'm trying to achieve briefly:

I run several websites and am running pilots for a new framework on a few server.
I have a certain script set us like a bunch of checkboxes, one of which checks a URL for it's status response set to a $ClientURL variable.
So I have something like the following:

Set includes
Set variables (one of which is $ClientURL = ("www.example.com").
Start loop
   Main script
      If $ClientURL = ("www.example.com") Then
          $ClientURL = ("www.a.com")
      If $ClientURL = ("www.a.com") Then
         $ClientURL = ("www.b.com")
      ElseIf $ClientURL = ("www.b.com") Then
         $ClientURL = ("www.c.com")
      ElseIf $ClientURL = ("www.c.com") Then
         $ClientURL = ("www.d.com")
      ElseIf $ClientURL = ("www.c.com") Then
         $ClientURL = ("www.example.com")
      Sleep until the script restarts the loop.
End loop

This only uses one main script and changes the variables needed to run in by the following value every time.
My problem is this...
Everything runs smoothly, but if a webserver takes too long to respond, the program will timeout.
This doesn't give a certain status, so it doesn't get logged by the script so it can move on to the next one.
It just freezes and crashes on it eventually.
Is there a way to add a certain timeout to a line?
Lets say something like this:

Func A ()
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", $ClientURL, False)
$oHTTP.Send()
If the time it takes = >10 seconds
   Move on to the next line
Else
   Do nothing
EndFunc

I thought about making a variable that tracks the system time in seconds that has passed by and resets it at the beginning of every new function,
but I was hoping there'd be something more efficient...
Thanks in advance guys! :)

Edited by Spyderco
Didn't complete the post yet.

Share this post


Link to post
Share on other sites



We have no idea what you're trying to achieve....

Is there a question in there? Because your title and description don't match up.

Share this post


Link to post
Share on other sites

I suspect you lost part of your post there Spyderco :) 


Roses are FF0000, violets are 0000FF... All my base are belong to you.

Share this post


Link to post
Share on other sites
9 minutes ago, InunoTaishou said:

We have no idea what you're trying to achieve....

Is there a question in there? Because your title and description don't match up.

 

4 minutes ago, SadBunny said:

I suspect you lost part of your post there Spyderco :) 


Yeah, sorry... Got posted even though I wasn't finished typing it yet.
Edited it now ;)

Share this post


Link to post
Share on other sites

Idk much about http requests, I just use inet and curl but I think you want this member of the http object

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384061(v=vs.85).aspx

So it might look like

Func A()
    $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
    $oHTTP.Open("GET", $ClientURL, False)
    $oHTTP.SetTimeouts(ResolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout) ; Adjust your timeouts accordingly
    $oHTTP.Send()
    
    ; Idk what the status value is on a successful http request
    If ($oHTTP.Status <> ???) Then
        Move on to the next line
    Else
        Do nothing
    EndIf
EndFunc

 

Share this post


Link to post
Share on other sites
5 minutes ago, InunoTaishou said:

Idk much about http requests, I just use inet and curl but I think you want this member of the http object

https://msdn.microsoft.com/en-us/library/windows/desktop/aa384061(v=vs.85).aspx

So it might look like

Func A()
    $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
    $oHTTP.Open("GET", $ClientURL, False)
    $oHTTP.SetTimeouts(ResolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout) ; Adjust your timeouts accordingly
    $oHTTP.Send()
    
    ; Idk what the status value is on a successful http request
    If ($oHTTP.Status <> ???) Then
        Move on to the next line
    Else
        Do nothing
    EndIf
EndFunc

 

Thanks!
This might just be what I'm looking for!

Share this post


Link to post
Share on other sites

Added the line and still got the error, it just didn't return a status, so it grabbed the status from the previous line.
However, the errors stopped now... even with the timout taken out of the script...
Guess I looked for the reason of errors in the wrong place after all.
Time to check the event logger on the webserver in this case...

Thanks for the quick feedback!
It's definately a line I'll keep using in some scripts! :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • Gibbo
      _FileExistsTimeout()
      By Gibbo
      Hi All, 
      I went searching for something to speed up checking for files on the network (UNC Paths)
      Most examples were rather complicated but someones multi-threaded solution gave me an idea.
      Hope it is useful to someone.
      Seems to work well so far. 
       
      Func _FileExistsTimeout($sPath, $iTimeout = 1000) Local $hTimer = TimerInit() ; Begin the timer and store the handle in a variable. Local $iPID = Run(@AutoItExe & ' /AutoIt3ExecuteLine "ConsoleWriteError(FileExists(""' & $sPath & '""))"', @ScriptDir, @SW_HIDE, $STDERR_CHILD) Local $sOutput = "" Local $iDiff = 0 While $iDiff < $iTimeout $iDiff = TimerDiff($hTimer) $sOutput &= StderrRead($iPID) If @error Then ; Exit the loop if the process closes or StderrRead returns an error. ExitLoop EndIf WEnd ProcessClose($iPID) Switch StringStripWS($sOutput, 8) Case 1 Return True Case Else Return False EndSwitch EndFunc ;==>_FileExistsTimeout
    • GreenCan
      MsgBox_CountDown() - MsgBox with visual countdown
      By GreenCan
      Edit 2: Complete rewrite of the function, simplified version using a single function and without use of GUICtrlSetOnEvent or AutoItSetOption. Correct centering of message.
      Edit 1: Updated function to correct possible misbehaving AutoItSetOption.
      MsgBox with Visual CountDown
      Self-explanatory I guess...
      GreenCan
      MsgBox_CountDown.au3 (Previous downloads: 53)
    • funkey
      TCPConnectTimeout function
      By funkey
      Hello,
      if an IP address is not reachable then TCPConnect lasts about 21 seconds for me the return with the error. Now I wrote a function using my socket_UDF to set a timeout if the IP address cannot be reached.
      Have fun.


      _TCPConnectTimeout example
      #include "socket_UDF.au3" Global $iTimerStart, $iSock Global $TestIP = "1.2.3.4" Global $TestPort = 800 Global $ConnectionTimeout = 1000 _WSAStartup() Global $iTimerStart = TimerInit() $iSock = _TCPConnectTimeout($TestIP, $TestPort, $ConnectionTimeout) ConsoleWrite("_TCPConnectTimeout error: " & @error & " / new socket: " & $iSock & @CRLF) ConsoleWrite("Function lasts: " & Round(TimerDiff($iTimerStart), 3) & @LF) $iTimerStart = TimerInit() $iSock = TCPConnect($TestIP, $TestPort) ConsoleWrite("TCPConnect error: " & @error & " / new socket: " & $iSock & @CRLF) ConsoleWrite("Function lasts: " & Round(TimerDiff($iTimerStart), 3) & @LF) ; about 21 seconds for me _WSACleanup() Exit Func _TCPConnectTimeout($IP, $Port, $Timeout)  Local Const $WSAEWOULDBLOCK = 10035  Local $iSocket, $iResult, $tTimeout, $tWrite, $tErr  $iSocket = _socket()  If $iSocket = $SOCKET_ERROR Then Return SetError(1, 0, -1)  $iResult = _ioctlsocket($iSocket, $FIONBIO, 1) ; nonblocking socket  If $iResult <> 0 Then   _closesocket($iSocket)   Return SetError(2, 0, -1)  EndIf  $iResult = _connect($iSocket, $IP, $Port)  If $iResult = $SOCKET_ERROR Then   If _WSAGetLastError() = $WSAEWOULDBLOCK Then    $tWrite = DllStructCreate($tagFd_set)    $tErr = DllStructCreate($tagFd_set)    _FD_SET($iSocket, $tWrite)    _FD_SET($iSocket, $tErr)    $iResult = _selectEx(0, DllStructGetPtr($tWrite), DllStructGetPtr($tErr), $Timeout)    If $iResult <= 0 Then     _closesocket($iSocket)     Return SetError(3, 0, -1) ;timeout    Else     If Not _FD_ISSET($iSocket, $tWrite) Then      _closesocket($iSocket)      Return SetError(4, 0, -1) ; $tErr must have been set     EndIf    EndIf   Else    _closesocket($iSocket)    Return SetError(5, 0, -1) ; another WSA error   EndIf  EndIf  $iResult = _ioctlsocket($iSocket, $FIONBIO, 0) ; blocking socket again  If $iResult <> 0 Then   _closesocket($iSocket)   Return SetError(6, 0, -1)  EndIf  Return $iSocket EndFunc   ;==>_TCPConnectTimeout socket_UDF
      #include-once ; Some socket functions ; Author: funkey ; Project start 2013.03.12 ; Actual project date 2013.08.27 Global Const $tagIN_ADDR = "ulong S_addr;" Global Const $tagSockAddr = "USHORT sa_family;char sa_data[14]" Global Const $tagSockAddr_In = "short sin_family;USHORT sin_port;ULONG sin_addr;char sin_zero[8]" Global Const $tagSockAddr_Storage = "short ss_family;char ss_pad1[6];INT64 ss_align;char ss_pad1[112]" Global Const $tagTimeVal = "long tv_sec;long tv_usec" Global Const $tagAddrInfo = "int ai_flags;int ai_family;int ai_socktype;int ai_protocol;uint ai_addrlen;ptr ai_canonname;ptr ai_addr;ptr ai_next" Global Const $FD_SETSIZE = 64 Global Const $tagFd_set = "UINT fd_count;UINT fd_array[" & $FD_SETSIZE & "]" Global Const $AF_UNSPEC = 0 Global Const $AF_UNIX = 1 Global Const $AF_INET = 2 Global Const $AF_IMPLINK = 3 Global Const $AF_PUP = 4 Global Const $AF_CHAOS = 5 Global Const $AF_IPX = 6 Global Const $AF_NS = 6 Global Const $AF_ISO = 7 Global Const $AF_OSI = $AF_ISO Global Const $AF_ECMA = 8 Global Const $AF_DATAKIT = 9 Global Const $AF_CCITT = 10 Global Const $AF_SNA = 11 Global Const $AF_DECnet = 12 Global Const $AF_DLI = 13 Global Const $AF_LAT = 14 Global Const $AF_HYLINK = 15 Global Const $AF_APPLETALK = 16 Global Const $AF_NETBIOS = 17 Global Const $AF_VOICEVIEW = 18 Global Const $AF_FIREFOX = 19 Global Const $AF_UNKNOWN1 = 20 Global Const $AF_BAN = 21 Global Const $AF_ATM = 22 Global Const $AF_INET6 = 23 Global Const $SOCKET_ERROR = -1 Global Const $INVALID_SOCKET = -1 Global Const $SOCK_STREAM = 1 Global Const $SOCK_DGRAM = 2 Global Const $SOCK_RAW = 3 Global Const $SOCK_RDM = 4 Global Const $SOCK_SEQPACKET = 5 Global Const $IPPROTO_IP = 0 Global Const $IPPROTO_ICMP = 1 Global Const $IPPROTO_IGMP = 2 Global Const $IPPROTO_GGP = 3 Global Const $IPPROTO_TCP = 6 Global Const $IPPROTO_PUP = 12 Global Const $IPPROTO_UDP = 17 Global Const $IPPROTO_IDP = 22 Global Const $IPPROTO_ND = 77 Global Const $IPPROTO_RAW = 255 Global Const $SOL_SOCKET = 0xFFFF ;SOL_SOCKET Socket Options ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms740532(v=vs.85).aspx Global Const $IP_OPTIONS = 1 Global Const $SO_DEBUG = 1 Global Const $SO_ACCEPTCONN = 2 Global Const $SO_REUSEADDR = 4 ; BOOLEAN Global Const $SO_KEEPALIVE = 8 Global Const $SO_DONTROUTE = 16 Global Const $SO_BROADCAST = 32 ;INT Global Const $SO_USELOOPBACK = 64 Global Const $SO_LINGER = 128 Global Const $SO_OOBINLINE = 256 Global Const $SO_EXCLUSIVEADDRUSE = -5 ; BOOLEAN  (~SO_REUSEADDR) Global Const $SO_DONTLINGER = -129 ; (~SO_LINGER) Global Const $SO_SNDBUF = 0x1001 Global Const $SO_RCVBUF = 0x1002 Global Const $SO_SNDLOWAT = 0x1003 Global Const $SO_RCVLOWAT = 0x1004 Global Const $SO_SNDTIMEO = 0x1005 ; DWORD Global Const $SO_RCVTIMEO = 0x1006 ; DWORD Global Const $SO_ERROR = 0x1007 Global Const $SO_TYPE = 0x1008 Global Const $FIONBIO = 0x8004667E Global Const $FIONREAD = 0x4004667F Global Const $FIOASYNC = 0x8004667D Global Const $SIOCSHIWAT = 0x80047300 Global Const $SIOCGHIWAT = 0x80047301 Global Const $SIOCSLOWAT = 0x80047302 Global Const $SIOCGLOWAT = 0x80047303 Global Const $SIOCATMARK = 0x40047307 ;max backlog for listen() Global Const $SOMAXCONN = 0x7fffffff ;flags for send(to) Global Const $MSG_DONTROUTE = 4 Global Const $MSG_OOB = 1 Global $hDLL_WS2_32 = 0 Func _WSAStartup()  If $hDLL_WS2_32 = 0 Then   $hDLL_WS2_32 = DllOpen("ws2_32.dll")   If $hDLL_WS2_32 = -1 Then    $hDLL_WS2_32 = 0    Return 0   EndIf   If TCPStartup() = 0 Then ;TCPStartup() is equal to WSAStartup function    DllClose($hDLL_WS2_32)    $hDLL_WS2_32 = 0    Return 0   EndIf  EndIf  Return 1 EndFunc   ;==>_WSAStartup Func _WSACleanup()  If $hDLL_WS2_32 <> 0 Then   TCPShutdown() ;TCPShutdown() is equal to WSACleanup function   DllClose($hDLL_WS2_32)   $hDLL_WS2_32 = 0  EndIf  Return 1 EndFunc   ;==>_WSACleanup Func _setsockopt($iSocket, $iLevel, $iOptName, $tOptVal)  Local $iOptLen = DllStructGetSize($tOptVal)  Local $aRet = DllCall($hDLL_WS2_32, "int", "setsockopt", "uint", $iSocket, "int", $iLevel, "int", $iOptName, "struct*", $tOptVal, "int", $iOptLen)  Return $aRet[0] EndFunc   ;==>_setsockopt Func _getsockopt($iSocket, $iLevel, $iOptName, ByRef $tOptVal)  Local $iOptLen = DllStructGetSize($tOptVal)  Local $aRet = DllCall($hDLL_WS2_32, "int", "setsockopt", "uint", $iSocket, "int", $iLevel, "int", $iOptName, "struct*", $tOptVal, "int", $iOptLen)  Return $aRet[0] EndFunc   ;==>_getsockopt Func _socket($AF = $AF_INET, $SocketType = $SOCK_STREAM, $Protocol = $IPPROTO_TCP) ; AF_INET, SOCK_STREAM, IPPROTO_TCP  Local $aRet = DllCall($hDLL_WS2_32, "int", "socket", "int", $AF, "int", $SocketType, "int", $Protocol)  Return $aRet[0] EndFunc   ;==>_socket Func _closesocket($iSocket)  Local $aRet = DllCall($hDLL_WS2_32, "int", "closesocket", "UINT", $iSocket)  Return $aRet[0] EndFunc   ;==>_closesocket ;shutdown() allows you to cut off communication in a certain direction, or both ways (just like closesocket() does.) ;0 Further receives are disallowed ;1 Further sends are disallowed ;2 Further sends and receives are disallowed (like closesocket()) ;It's important to note that shutdown() doesn't actually close the file descriptor — it just changes ;its usability. To free a socket descriptor, you need to use closesocket(). Func _shutdown($iSocket, $iHow)  Local $aRet = DllCall($hDLL_WS2_32, "int", "shutdown", "UINT", $iSocket, "int", $iHow)  Return $aRet[0] EndFunc   ;==>_shutdown Func _bind($iSocket, $sIP, $iPort)  Local $tSockAddr_In = DllStructCreate($tagSockAddr_In)  Local $pSockAddr_In = DllStructGetPtr($tSockAddr_In)  Local $iSizeSockAddr_In = DllStructGetSize($tSockAddr_In)  DllStructSetData($tSockAddr_In, "sin_family", $AF_INET)  DllStructSetData($tSockAddr_In, "sin_port", _htons($iPort))  DllStructSetData($tSockAddr_In, "sin_addr", _inet_addr($sIP))  Local $aRet = DllCall($hDLL_WS2_32, "int", "bind", "UINT", $iSocket, "struct*", $pSockAddr_In, "int", $iSizeSockAddr_In)  Return $aRet[0] EndFunc   ;==>_bind Func _connect($iSocket, $sIP, $iPort)  Local $tSockAddr_In = DllStructCreate($tagSockAddr_In)  Local $iSizeSockAddr_In = DllStructGetSize($tSockAddr_In)  DllStructSetData($tSockAddr_In, "sin_family", $AF_INET)  DllStructSetData($tSockAddr_In, "sin_port", _htons($iPort))  DllStructSetData($tSockAddr_In, "sin_addr", _inet_addr($sIP))  Local $aRet = DllCall($hDLL_WS2_32, "int", "connect", "UINT", $iSocket, "struct*", $tSockAddr_In, "int", $iSizeSockAddr_In)  Return $aRet[0] EndFunc   ;==>_connect Func _listen($iSocket, $iBacklog = $SOMAXCONN)  Local $aRet = DllCall($hDLL_WS2_32, "int", "listen", "UINT", $iSocket, "int", $iBacklog)  Return $aRet[0] EndFunc   ;==>_listen Func _accept($iSocket, ByRef $sIP, ByRef $iPort)  Local $tAddr = DllStructCreate($tagSockAddr_In)  Local $aRet = DllCall($hDLL_WS2_32, "UINT", "accept", "UINT", $iSocket, "struct*", $tAddr, "int*", DllStructGetSize($tAddr))  $iPort = _ntohs(DllStructGetData($tAddr, 2))  $sIP = _inet_ntoa(DllStructGetData($tAddr, 3))  Return $aRet[0] EndFunc   ;==>_accept Func _select(ByRef $tReadFds, $iTimeout)  Local $tTimeout = DllStructCreate($tagTimeVal)  DllStructSetData($tTimeout, "tv_sec", Floor($iTimeout / 1000))  DllStructSetData($tTimeout, "tv_usec", ($iTimeout - DllStructGetData($tTimeout, "tv_sec") * 1000) * 1000)  Local $aRet = DllCall($hDLL_WS2_32, "int", "select", "int", 0, "struct*", $tReadFds, "ptr", 0, "ptr", 0, "struct*", $tTimeout)  Return $aRet[0] ;-1 = error; 0 = timeout; else data! EndFunc   ;==>_select Func _selectEx($pReadFds, $pWriteFds, $pExceptFds, $iTimeout)  Local $tTimeout = DllStructCreate($tagTimeVal)  DllStructSetData($tTimeout, "tv_sec", Floor($iTimeout / 1000))  DllStructSetData($tTimeout, "tv_usec", ($iTimeout - DllStructGetData($tTimeout, "tv_sec") * 1000) * 1000)  Local $aRet = DllCall($hDLL_WS2_32, "int", "select", "int", 0, "ptr", $pReadFds, "ptr", $pWriteFds, "ptr", $pExceptFds, "struct*", $tTimeout)  Return $aRet[0] ;-1 = error; 0 = timeout; else data! EndFunc   ;==>_selectEx Func _FD_ZERO(ByRef $tFd_set)  DllStructSetData($tFd_set, "fd_count", 0) EndFunc   ;==>_FD_ZERO Func _FD_SET($iSock, ByRef $tFd_set)  Local $iCount = DllStructGetData($tFd_set, "fd_count")  For $i = 0 To $iCount - 1   If DllStructGetData($tFd_set, "fd_Array", $i + 1) = $iSock Then    ExitLoop   EndIf  Next  If $i = $iCount Then   If $iCount < $FD_SETSIZE Then    DllStructSetData($tFd_set, "fd_array", $iSock, $i + 1)    DllStructSetData($tFd_set, "fd_count", $iCount + 1)   EndIf  EndIf EndFunc   ;==>_FD_SET Func _FD_CLR($iSock, ByRef $tFd_set)  Local $iCount = DllStructGetData($tFd_set, "fd_count")  For $i = 0 To $iCount - 1   If DllStructGetData($tFd_set, "fd_array", $i + 1) = $iSock Then    While ($i < $iCount - 1)     DllStructSetData($tFd_set, "fd_array", DllStructGetData($tFd_set, "fd_array", $i + 2), $i + 1)     $i += 1    WEnd   EndIf   DllStructSetData($tFd_set, "fd_count", $iCount - 1)   ExitLoop  Next EndFunc   ;==>_FD_CLR Func _FD_ISSET($iSock, ByRef $tFd_set)  Local $aRet = DllCall($hDLL_WS2_32, "int", "__WSAFDIsSet", "UINT", $iSock, "struct*", $tFd_set)  Return $aRet[0] EndFunc   ;==>_FD_ISSET Func _send($iSocket, ByRef $tBuffer, $iFlags = 0)  Local $iLen = DllStructGetSize($tBuffer)  Local $aRet = DllCall($hDLL_WS2_32, "int", "send", "int", $iSocket, "struct*", $tBuffer, "int", $iLen, "int", $iFlags)  Return $aRet[0] EndFunc   ;==>_send Func _sendto($iSocket, ByRef $tBuffer, ByRef $tTo, $iFlags = 0)  Local $iLen = DllStructGetSize($tBuffer)  Local $iLenTo = DllStructGetSize($tTo)  Local $aRet = DllCall($hDLL_WS2_32, "int", "sendto", "int", $iSocket, "struct*", $tBuffer, "int", $iLen, "int", $iFlags, "struct*", $tTo, "int", $iLenTo)  Return $aRet[0] EndFunc   ;==>_sendto Func _recv($iSocket, ByRef $tBuffer, $iFlags = 0)  Local $iLen = DllStructGetSize($tBuffer)  Local $aRet = DllCall($hDLL_WS2_32, "int", "recv", "uint", $iSocket, "struct*", $tBuffer, "int", $iLen, "int", $iFlags)  Return $aRet[0] EndFunc   ;==>_recv Func _recvfrom($iSocket, ByRef $tBuffer, ByRef $tFrom, $iFlags = 0)  Local $iLen = DllStructGetSize($tBuffer)  Local $iLenFrom = DllStructGetSize($tFrom)  Local $aRet = DllCall($hDLL_WS2_32, "int", "recvfrom", "uint", $iSocket, "struct*", $tBuffer, "int", $iLen, "int", $iFlags, "struct*", $tFrom, "int", $iLenFrom)  Return $aRet[0] EndFunc   ;==>_recvfrom Func _inet_addr($sIP)  Local $aRet = DllCall($hDLL_WS2_32, "ULONG", "inet_addr", "str", $sIP)  Return $aRet[0] EndFunc   ;==>_inet_addr Func _inet_ntoa($pIn_Addr) ;only IPv4 (deprecated) --> use _inet_ntop() instead  Local $aRet = DllCall($hDLL_WS2_32, "str", "inet_ntoa", "ptr", $pIn_Addr)  Return $aRet[0] EndFunc   ;==>_inet_ntoa Func _inet_ntop($pIn_Addr, $iFamily = $AF_INET) ;IPv4 and IPv6 --> Vista and above  Local $tBuffer = DllStructCreate("char[46]") ;16 for IPv4, 46 for IPv6  Local $aRet = DllCall($hDLL_WS2_32, "str", "inet_ntop", "int", $iFamily, "ptr", $pIn_Addr, "struct*", $tBuffer, "int", DllStructGetSize($tBuffer))  Return DllStructGetData($tBuffer, 1) EndFunc   ;==>_inet_ntop ;host byte order to network byte order (double) Func _htond($value)  Local $aRet = DllCall($hDLL_WS2_32, "UINT64", "htond", "double", $value)  Return $aRet[0] EndFunc   ;==>_htond ;host byte order to network byte order (float) Func _htonf($value)  Local $aRet = DllCall($hDLL_WS2_32, "UINT", "htonf", "float", $value)  Return $aRet[0] EndFunc   ;==>_htonf ;host byte order to network byte order (long) Func _htonl($value)  Local $aRet = DllCall($hDLL_WS2_32, "ULONG", "htonl", "ULONG", $value)  Return $aRet[0] EndFunc   ;==>_htonl ;host byte order to network byte order (long long) Func _htonll($value)  Local $aRet = DllCall($hDLL_WS2_32, "UINT64", "htonll", "UINT64", $value)  Return $aRet[0] EndFunc   ;==>_htonll ;host byte order to network byte order (short) Func _htons($iPort)  Local $aRet = DllCall($hDLL_WS2_32, "USHORT", "htons", "USHORT", $iPort)  Return $aRet[0] EndFunc   ;==>_htons ;network byte order to host byte order (double) Func _ntohd($value)  Local $aRet = DllCall($hDLL_WS2_32, "double", "ntohd", "UINT64", $value)  Return $aRet[0] EndFunc   ;==>_ntohd ;network byte order to host byte order (float) Func _ntohf($value)  Local $aRet = DllCall($hDLL_WS2_32, "float", "ntohf", "UINT", $value)  Return $aRet[0] EndFunc   ;==>_ntohf ;network byte order to host byte order (long) Func _ntohl($iNetLong)  Local $aRet = DllCall($hDLL_WS2_32, "ULONG", "ntohl", "ULONG", $iNetLong)  Return $aRet[0] EndFunc   ;==>_ntohl ;network byte order to host byte order (long long) Func _ntohll($value)  Local $aRet = DllCall($hDLL_WS2_32, "UINT64", "ntohll", "UINT64", $value)  Return $aRet[0] EndFunc   ;==>_ntohll ;network byte order to host byte order (short) Func _ntohs($iNetShort)  Local $aRet = DllCall($hDLL_WS2_32, "USHORT", "ntohs", "USHORT", $iNetShort)  Return $aRet[0] EndFunc   ;==>_ntohs Func _WSAGetLastError()  Local $aRet = DllCall($hDLL_WS2_32, "int", "WSAGetLastError")  Return $aRet[0] EndFunc   ;==>_WSAGetLastError Func _GetLocalPort($iSocket)  ;funkey  Local $tagIN_ADDR = "ulong S_addr;"  Local $tagSockAddr_In = "short sin_family;ushort sin_port;ptr sin_addr;char sin_zero[8];"  Local $tIn_Addr = DllStructCreate($tagIN_ADDR)  Local $tName = DllStructCreate($tagSockAddr_In)  DllStructSetData($tName, "sin_addr", DllStructGetPtr($tIn_Addr))  Local $aRes = DllCall($hDLL_WS2_32, "int", "getsockname", "uint", $iSocket, "struct*", $tName, "int*", 512)  Local $aRes2 = DllCall($hDLL_WS2_32, "ushort", "ntohs", "ushort", DllStructGetData($tName, 2))  Return $aRes2[0] EndFunc   ;==>_GetLocalPort Func _getsockname($iSocket)  Local $tIn_Addr = DllStructCreate($tagIN_ADDR)  Local $tName = DllStructCreate($tagSockAddr_In)  DllStructSetData($tName, "sin_addr", DllStructGetPtr($tIn_Addr))  Local $aRes[2]  Local $aRet = DllCall($hDLL_WS2_32, "int", "getsockname", "uint", $iSocket, "struct*", $tName, "int*", 512)  If Not @error And $aRet[0] = 0 Then   $aRes[0] = _inet_ntoa(DllStructGetData($tName, "sin_addr")) ;IP address   $aRes[1] = _ntohs(DllStructGetData($tName, "sin_port")) ;IP port ;~   $aRes[2] = DllStructGetData($tName, "sin_family") ; always AF_INET !?   Return $aRes  EndIf  Return SetError(1, 0, 0) EndFunc   ;==>_getsockname ;More than TCPNameToIP(), returns an array of IP addresses Func _getaddrinfo($sNodeName)  Local $pResult, $tAddrInfo, $sIP  Local $aRet = DllCall($hDLL_WS2_32, "int", "getaddrinfo", "str", $sNodeName, "ptr", 0, "ptr", 0, "ptr*", 0)  $pResult = $aRet[4]  Do   $tAddrInfo = DllStructCreate($tagAddrInfo, $pResult)   Local $tName = DllStructCreate($tagSockAddr_In, DllStructGetData($tAddrInfo, "ai_addr"))   $sIP &= _inet_ntoa(DllStructGetData($tName, "sin_addr")) & ";"   $pResult = DllStructGetData($tAddrInfo, "ai_next")  Until $pResult = 0  _freeaddrinfo($aRet[4])  Return StringSplit(StringTrimRight($sIP, 1), ";", 2) EndFunc   ;==>_getaddrinfo Func _freeaddrinfo($pAddrInfo)  DllCall($hDLL_WS2_32, "none", "freeaddrinfo", "ptr", $pAddrInfo) EndFunc   ;==>_freeaddrinfo Func _ioctlsocket($iSocket, $iCmd, $iArg)  Local $aRet = DllCall($hDLL_WS2_32, "int", "ioctlsocket", "uint", $iSocket, "long", $iCmd, "ULONG*", $iArg)  Return $aRet[0] EndFunc   ;==>_ioctlsocket Func _TCPConnectEx($sIP, $iRemPort, $iRcvTimeOut = 0, $iSendTimeOut = 0, $iLocPort = -1)  Local $tTimeVal, $iSockError, $iBind, $iConnect, $aIP[1]  Local $iSock = _socket($AF_INET, $SOCK_STREAM, $IPPROTO_TCP)  If $iRcvTimeOut > 0 Then   $tTimeVal = DllStructCreate("DWORD timeout")   DllStructSetData($tTimeVal, "timeout", $iRcvTimeOut)   $iSockError = _setsockopt($iSock, $SOL_SOCKET, $SO_RCVTIMEO, $tTimeVal)   If $iSockError Then    _closesocket($iSock)    Return SetError(1, _WSAGetLastError(), 0)   EndIf  EndIf  If $iSendTimeOut > 0 Then   $tTimeVal = DllStructCreate("DWORD timeout")   DllStructSetData($tTimeVal, "timeout", $iSendTimeOut)   $iSockError = _setsockopt($iSock, $SOL_SOCKET, $SO_SNDTIMEO, $tTimeVal)   If $iSockError Then    _closesocket($iSock)    Return SetError(2, _WSAGetLastError(), 0)   EndIf  EndIf  If $iLocPort >= 0 Then   $iBind = _bind($iSock, @IPAddress1, $iLocPort)   If $iBind Then    _closesocket($iSock)    Return SetError(3, _WSAGetLastError(), 0)   EndIf  EndIf  If _IsValidIP($sIP) Then   $aIP[0] = $sIP  Else   $aIP = _getaddrinfo($sIP)  EndIf  $iConnect = _connect($iSock, $aIP[0], $iRemPort)  If $iConnect Then   _closesocket($iSock)   Return SetError(4, _WSAGetLastError(), 0)  EndIf  Return $iSock EndFunc   ;==>_TCPConnectEx Func _IsValidIP($sIP)  Local $aIP = StringSplit($sIP, ".")  If $aIP[0] <> 4 Then Return SetError(1, 0, 0)  For $x = 1 To $aIP[0]   If $aIP[$x] < 0 Or $aIP[$x] > 255 Then Return SetError(2, 0, 0)  Next  Return 1 EndFunc   ;==>_IsValidIP TCPConnectTimeout & socket UDF.rar
    • AndyS01
      Set a timeout for _FTP_Connect()
      By AndyS01
      We have several servers and I'm writing a server status monitor. I am trying to quickly determine if I can FTP to each of our local servers. When I successfully do an _FTP_Open(), then call _FTP_Connect(), the _FTP_Connect takes around 45 seconds to time out.

      I want to make the 'FTP-ability' test to take no more than 1 or 2 seconds.

      Is there a way to change the _FTP_Connect() timeout? Perhaps there is another call I could use?

      Here is my sample code (with my server credentials removed).

      #include <FTPEx.au3> #include <array.au3> _Main() Exit (0) Func _Main() Local $server, $uname, $pwd, $hSession, $iID, $bRet $server = "xxxxx" $uname = "xxxxx" $pwd = "xxxx" $hSession = _FTP_Open('MyFTP') If $hSession <> 0 Then $iID = _FTP_Connect($hSession, $server, $uname, $pwd, 1, 21) ConsoleWrite("Can connect OK" & @CRLF) If ($iID <> 0) Then Else ConsoleWrite("Connect FAILED" & @CRLF) EndIf _FTP_Close($hSession) Else ConsoleWrite("+++: Openfailed" & @CRLF) EndIf EndFunc ;==>_Main
    • Roshith
      TrayTip fades away fast
      By Roshith
      Hi,
      When I use traytip with timeout 20 secs, sometimes it stays for 20secs or more, but sometimes it fades away fast (less than 5 secs). What is the reason for this. Is there any work around.

      TrayTip("Title", "Text", 20)
      Sleep(30000)

      Roshith