TCP Send Problem (TCPShutDown)

  • Hallo,

    ich bin Novize mit AutoIt und habe da ein seltsames (?) Problem mit einem recht kurzen (wegen Fehlersuche schon zusammengekürzten) Script:

    [autoit][/autoit][autoit][/autoit][autoit]

    Local $Socket

    [/autoit][autoit][/autoit][autoit]

    TCPStartup() ;OPEN A SOCKET AT ALL

    [/autoit][autoit][/autoit][autoit]

    $Socket = TCPConnect("x.x.x.5", 10000)

    [/autoit][autoit][/autoit][autoit]

    TCPSend($Socket, "Diesen Text senden")
    ;TCPShutdown()

    [/autoit]

    das Script FUNKTIONIERT, wenn ich die Zeile TCPShutDown() WEG LASSE (!!).

    Wenn ich diese Zeile, die gemäß Doku gebraucht wird, um Speicherverbrauch zu verhindern,

    Zitat

    Remarks
    A script must call one TCPShutdown() call for every
    successful TCPStartup() call.
    UDPShutdown() is just an alias of
    TCPShutdown().

    DRIN HABE, funzt das Script NICHT.


    Es ist mir aufgefallen, dass auch in den Beispielen zu "TCPSend" das TCPShutDown() NICHT drin ist!


    Kann mir vielleicht jemand auf die Sprünge helfen??? Ich muss ein kleines AutoIt Script schreiben, welches möglicherweise zig-tausende mal aufgerufen wird. Und da muss ich sicher stellen, dass kein Speicher-Leak aufgebaut wird, und dann - und wenn's erst beim millionsten Aufruf der Fall ist - das Script nicht tut.

    1000 Dank für Eure Hilfe!
    jwka

    Einmal editiert, zuletzt von jwka (7. November 2011 um 15:21)

  • SCHEINT EIN INTERNES TIMING PROBLEM ZU SEIN ...

    Falls jemand mal hierüber stolpert: Ich habe nun noch ein sleep(100) vor dem TCPShutDown() eingebaut - und es tut alles!

    Es scheint so, als würde TCPShutDown die Ressource "killen" ehe sie mit Senden fertig ist. Ich würde das mal als "Bug" bezeichnen.

    jwka

  • Das ist bei mir auch so, du musst eine Pause nach dem Send machen. Anscheinend brauch TCP zu lange bis alles gesendet ist und vorher schließt du schon alle Verbindungen durch TCPShutdown().

  • Danke für den Hinweis!

    Stimmt. Hab's gerade ausprobiert.

    Da sollte die Doku vielleicht mal angepasst werden. Weder in den Beispielen ist das benutzt, noch in der Doku für TCPClose ist das erwähnt. Die macht den Eindruck, dass der Befehl für Receiver TCP'S (Server) sei. Deshalb habe ich's auch nicht benutzt.

    Thx again
    jwka