Seltsames Verhalten unter Linux (su und Debugger)

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Kukulkan »

Hallo,

ich habe zwei Anwendungen unter Linux compiliert. Die eine öffnet einen TCP/IP Server unter Port 6001 (A) und die andere (B) soll darauf zugreifen. Falls der zugreifende (B) die Anwendung (A) nicht erreicht, startet er den Server (A) von selbst (run Kommando).

Szenario 1:
Wenn ich den die Anwendung (B) im Debugger starte, dann startet Sie Server (A) und es klappt alles.

Szenario 2:
Wenn ich Anwendung (B) in compilierter Form mit sudo starte, dann startet (B) den (A) und kann ihn dann aber nicht erreichen:

Code: Alles auswählen

ConnectionID.l = OpenNetworkConnection("127.0.0.1", ServerPort.l, #PB_Network_TCP)
liefert immer 0 als Ergebnis.

Kann es sein, dass eine Anwendung, welche mit sudo gestartet wurde, keine anderen Anwendungen erreichen kann? In dem Fall hat Sie den (A) ja sogar selbst gestartet. Irgendwie ein Firewall Thema? Ich hab Ubuntu 10.04 LTS in Standard-Konfiguration am laufen und keinerlei Idee, warum das so ist :|

PS. Es ändert auch nichts, ob ich 127.0.0.1 oder "localhost" nehme.

Tipps oder Hilfe?

Kukulkan
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Kukulkan »

Hallo,

das beschriebene Problem existiert noch immer. Bin völlig ratlos, warum sich die beiden nur dann finden, wenn ich die aufrufende Anwendung im Debugger starte. Kann das ein Bug sein oder sowas?

Kukulkan
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Re: Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Macros »

Hi,

Schau doch mal mit "sudo netstat -a -l --tcp" ob dein Server überhaupt lauscht,
prüfe den Rückgabewert von CreateNetworkServer() und InitNetwork(),
und wenn all das klappt, schau ob du dich von einem normalen oder einem root Terminal per telnet zu deinem Server verbinden kannst.
Das hilft dir vielleicht dein Problem einzugrenzen.

Generell sollte ein Server eigentlich keine Root-Rechte haben, schau dir doch mal genau an, was dein Programm macht,
und überleg dir, ob es nicht eventuell reicht, die Rechte einer Datei zu ändern.

Gruß
Macros
Bild
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Kukulkan »

Hallo Macros,

danke für den Tipp. Ich sehe den Server als *:x11-1 gelistet. Ich stelle aber gerade fest, dass sich der Server exakt in dem Moment, wenn der Client zugreifen möchte (Client macht OpenNetworkConnection()), der Server einfach verschwindet. Mit Debug-Meldungen erkenne ich, dass er einfach aufhört zu laufen. Kein Fehler, keine Exception, keine Abarbeitung von Code. Einfach weg... Bin grad ratlos, denn ich mach eigentlich nicht viel. Ich werde morgen mal den ganzen Server entkernen bis auf die Basis-Funktionalität. Mal sehen, ab wann er nicht mehr abschmiert. Irgendwie werd ich das Gefühl nicht los, dass da unter Linux was nicht in Ordnung ist...

Ich poste das Ergebnis, ganz Sicher!

Kukulkan
Dristar
Beiträge: 72
Registriert: 13.09.2004 12:46

Re: Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Dristar »

@Kukulkan

hi , ich habe das mal mit den Client Server Beispielen auf PureArea.net probiert.

1 ) Server gestartet und mit sudo Client gestartet - keine Probleme
2 ) Server mit STRG - C beendet und wollte neu starten geht nicht. Ich hab solange probiert zu startet bis
er wieder gelaufen ist ( nach ca 1 Minute). Wenn der Server mal läuft gibt es keine Problem.

Also glaube ich das dein Problem beim startet des Servers ist. Mach den ersten Test mit deinem Programm und warte
länger bis du den zweiten Test mit sudo machst. Es dauert unterschiedlich lang bis der Server wieder Online geht.
Auch habe ich ab und zu das der Server gleich wieder startet.

kommisch :?

Test mit Ubuntu 10.04 32bit PureBasic 4.51

mfg Dristar

EDIT
jetzt habe ich was !!

Das Problem was ich da habe ist egal ob ich sudo oder als normal User mache.
Das Client Beispiel verbindet sich mit dem Server und Sendet den String. Beim Input() bleibt der Client stehen und beendet das Programm nicht. Versucht man den Server neu zu starten , kommt es zu dem Phänomen (Punkt 2).
Löscht mann das INPUT() aus dem Client. Kann mann den Server beenden und gleich wieder Starten. Ich vermute dass du den Client nicht ordentlich abmeldest , bevor du eine neue Verbindung aufbaust oder
das du durch irgendein vorangehenden test das Phänomen (Punkt 2) aktivierst :D . Dann ist jeder weiter Test sinnlos weil der Server erst wieder starten wird wenn linux es erkennt.

Code: Alles auswählen

If InitNetwork() = 0 
  MessageRequester("Error", "Error") 
EndIf 
ip$ = InputRequester("","bitte server ip eingeben!","") 
Debug ip$ 
ConnectionID = OpenNetworkConnection(ip$, 6001,#PB_Network_TCP) 
If ConnectionID 
  OpenConsole() 
  PrintN("Erfolgreich zum server Verbunden") 
  String$ = InputRequester("","String zum versenden eingeben","") 
  If String$ 
    SendNetworkData(ConnectionID, @String$, Len(String$)) 
  EndIf 
  Input() 
Else 
  Debug "error" 
EndIf 

End 


mfg Dristar
PB 4.61 Beta 1 , Linux Ubuntu 11.10 ...
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Kukulkan »

Hallo Dristar,

schön, dass das auch jemand anderes Nachvollziehen kann. Ja, es scheint so, als wenn ein vom Programm nicht explizit geschlossener Server irgendwie offen bleibt. Ich hab auch manchmal das Problem, dass der Port noch recht lange belegt ist (kann kein CreateNetworkServer() aufrufen), obwohl keiner meiner Prozesse mehr läuft (ps ax). Hier scheint es eine massive Verzögerung zu geben, die es unter Windows nicht gibt.

Ich hab aber auch das Problem, dass mein Server in solchen Situationen dann einfach abschmiert. Er nutzt aber auch Threads, und das kann ja auch zu solchen Problemen führen. Ich werde den Server komplett neu aufbauen müssen und all diese Dinge direkt berücksichtigen. Ich kann ja auch mal die Thread-Safe Network Functions von hier gleich verwenden.

Grüße,

Kukulkan
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Kukulkan »

Hallo,

jetzt wird's Schräg. Kann das bitte mal jemand nachvollziehen?

Ich hab das unter Windows getestet.

Ich mach einen kleinen Server (Abbruch mit ESC). Bitte als Konsolenanwendung compilieren.

Code: Alles auswählen

; Server

InitNetwork()

OpenConsole()

PrintN("Server started!")

ServerID.l = CreateNetworkServer(1, 6002, #PB_Network_TCP)

While Quit.b = #False
  
  ; ####### check network data #######
  SEvent.l = NetworkServerEvent()
  CID.l = 0
  If SEvent.l <> 0
    CID.l = EventClient()
  EndIf
  
  Select SEvent.l
  
    Case #PB_NetworkEvent_Connect ; ####### new client #######
      ; PrintN("Connect " + Str(CID.l))
      
    Case #PB_NetworkEvent_Data
      ; PrintN("Data " + Str(CID.l))
      *NetworkBuffer.l  = AllocateMemory(8192)  ; 8 KB Puffer for Server
      ReceivedContent.s = ""
      length.l = ReceiveNetworkData(CID.l, *NetworkBuffer.l, 8192)
      If length.l > 0
        ReceivedContent.s = PeekS(*NetworkBuffer.l, length.l)
      EndIf
      FreeMemory(*NetworkBuffer.l)
      
      If ReceivedContent.s <> ""
        ; calculate something
        PrintN("Did some job. " + FormatDate("%yyyy/%mm/%dd %hh:%ii:%ss", Date()))
        For x.l = 1 To 50000
          e.l = Random(1000)
        Next
        SendNetworkString(CID.l, "Result is aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbccccccccccccccc")
        CloseNetworkConnection(CID.l)
      EndIf
      
    Case #PB_NetworkEvent_Disconnect
      
  EndSelect
  
  If Inkey() = Chr(27): Quit.b = #True: EndIf
  
  Delay(1)
  
Wend

CloseNetworkServer(1)

PrintN(" ")
PrintN("FINISHED SERVER")

End
Dazu noch einen Test-Client. Dieser baut eine Verbindung auf, sendet was, wartet auf ein Ergebnis. Nimmt dieses und prüft dieses. Dann wird die Verbindung geschlossen. Und das in einem Endlos-Loop.

Das ist der Client (Abbruch mit ESC). Bitte als Konsolenanwendung compilieren.

Code: Alles auswählen

; Client

lngTimeoutSeconds.l = 5

InitNetwork()

OpenConsole()

PrintN("Client started!")

While Quit.b = #False
  
  Conn.l = OpenNetworkConnection("127.0.0.1", 6002)
  
  If Conn.l <> 0
    ; send request
    SendNetworkString(Conn.l, "Hey, do some job...")
  
    StartTime.l = ElapsedMilliseconds() + (lngTimeoutSeconds.l * 1000)
    Result.s = ""
    
    Repeat
      *NetworkBuffer.l = AllocateMemory(8192)  ; 8 KB Puffer for Server
      length.l = ReceiveNetworkData(Conn.l, *NetworkBuffer.l, 8192)
      If length.l > 0
        Result.s = Result.s + PeekS(*NetworkBuffer.l, length.l)
      EndIf
      FreeMemory(*NetworkBuffer.l)
    Until Len(Result.s) > 2 Or ElapsedMilliseconds() > StartTime.l Or Quit.b = #True
    
    If ElapsedMilliseconds() > StartTime.l
      PrintN("TIMEOUT!")
    EndIf
    
    CloseNetworkConnection(Conn.l)
    
    If Result.s <> "Result is aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbccccccccccccccc"
      PrintN("FAILED!")
    EndIf
  Else
    ; no connection possible!
    PrintN("no connection possible!")
  EndIf
  
  Delay(1)
  
  If Inkey() = Chr(27): Quit.b = #True: EndIf
  
Wend

PrintN(" ")
PrintN("FINISHED CLIENT")

CloseConsole()

End
Am Anfang läuft das, und dann, nach einer Weile, beginnt der Client mit "no connection possible!". Das wird dann immer schlimmer. Nur neu starten des Server's hilft dann. Am Client liegts wohl nicht.

Was ist mein Fehler? Kann das jemand nachvollziehen? Ich werd noch verrückt, weil meine Anwendung dauernd die Lasttests nicht besteht. Genau wegen dem Verhalten. Irgendwann baut der Server einfach keine Verbindungen auf. Muss ich noch irgendwo was aufräumen? Hab ich was vergessen?

Kukulkan
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Re: Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Macros »

Hm,

könnte das an deiner Konfiguration, einer Firewall oder Windows Allgemein liegen?

Hier läuft alles problemlos seit 10 Minuten mit 2 Clients.
System siehe sig (Linux)

Gruß
Macros
Bild
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Kukulkan »

Hallo Macros,

vielen Dank für's testen. Nein, eigentlich nicht. Hier läuft es so ca. 40 Sekunden stabil, dann fangen die Probleme an (Rechner frisch und neu gestartet).

Ich habe keine Firewall (ausser die von Windows selbst), und nix exotisches. Keine Networking-Tweaks oder sowas.

Ich starte im Debugger, kann es daran liegen?

[UPDATE]Wenn ich in compilierter Form teste, dann geht es noch schneller schief. Zum Teil schon nach wenigen Sekunden...[/UPDATE]

Kukulkan
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Re: Seltsames Verhalten unter Linux (su und Debugger)

Beitrag von Macros »

Sodala, 2 weitere Tests:

unter Linux, keine Probleme 20 Minuten ohne Debugger.

Selbst unter meinem Windows 7 läuft es mit und ohne Debugger 5 Minuten, länger wollte ich mir das OS nicht antun ;)
Dein Code sieht vollkommen ok aus,
und ohne das Problem reproduzieren zu können, kann ich leider nicht weiterhelfen.

Gruß
Macros
Bild
Antworten