tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von RedWing
  • 1 Beitrag von OnlyFoo
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
814
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Hallo,

    folgender Code:

    Code c++:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    struct timeval timeout;
    timeout.tv_sec = 2;
     
    if(tim > 50 && tim < 120 * 1000) // tim ist ein int und kommt als Benutzer-Eingabe
    {
      timeout.tv_sec = 0;
      timeout.tv_usec = tim * 1000 * 1000;
    }
     
    select(......, timeout);

    Anscheinend werden die Microsekunden-Angaben vollkommen ignoriert. Kann mir jemand sagen, was ich falsch mache?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  2. #2
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.358
    Blog-Einträge
    4
    Woher weißt du, dass die Mikrosekunden ignoriert werden bzw. wie ist die Funktion select definiert?
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  3. #3
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    select bezieht sich wohl auf die Winsockets.
    Wegen dem Timeout fällt mir aber nichts ein.
     

  4. #4
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    kannst du mal ein Minimalbeispiel posten was bei dir nicht tut? Welches Betriebssystem verwendest du? In Linux liegt die Timerauflösung für select AFAIK im Jiffies Bereich. D.h. ist dein Linuxkernel bspw. mit HZ=250 kompiliert würde select mit einer Auflösung von 4ms arbeiten...

    Gruß,
    RedWing
    saftmeister bedankt sich. 
    "I'm not deaf, I'm ignoring you"
    ----

  5. #5
    OnlyFoo OnlyFoo ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    470
    Wieso lässt du werte >= 1000 für "tim" zu? Dann solltest du vielleicht sowas machen:
    Code c:
    1
    2
    
    timeout.tv_sec = tim / 1000;
    timeout.tv_usec = (tim % 1000) * 1000 * 1000;

    Und wenn ich mich recht erinnere, erwartet select einen pointer auf ein timeval. also select(..., &timeout);
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Ok, hier ist der komplette Code:

    <Code aus rechtlichen Gründen entfernt>

    Und falls hier einer denkt, das wäre illegal: Das Tool soll in der Firma eingesetzt werden um zu prüfen, ob von bestimmten Rechnern bestimmte Ports erreichbar sind für Monitoring- und Debugging-Zwecke
    Geändert von saftmeister (17.07.10 um 18:12 Uhr)
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Zitat Zitat von saftmeister Beitrag anzeigen
    Und falls hier einer denkt, das wäre illegal: Das Tool soll in der Firma eingesetzt werden um zu prüfen, ob von bestimmten Rechnern bestimmte Ports erreichbar sind für Monitoring- und Debugging-Zwecke
    Und wieso verwendet ihr dazu nicht einfach ein frei verfügbares, ausgiebig getestetes Tool wie Nmap? Hast du abgesehen davon den Vorschlag von OnlyFoo schon ausprobiert?

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  8. #8
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Zitat Zitat von Matthias Reitinger Beitrag anzeigen
    Und wieso verwendet ihr dazu nicht einfach ein frei verfügbares, ausgiebig getestetes Tool wie Nmap?
    Weil das nicht gestattet wird. Wir hätten dafür genauso gut telnet verwenden können, wenn es gestattet wäre, es zu installieren. Das bekommt man nicht durch die Security-Abteilung...


    Zitat Zitat von Matthias Reitinger Beitrag anzeigen
    Hast du abgesehen davon den Vorschlag von OnlyFoo schon ausprobiert?
    Ja hab ich. Es war mir gleich klar, das es nicht funktioneren kann. tv_sec ist vom Typ long, das Teilen von 500 durch 1000 kommt nach Adam Riese auf 0,2, was durch den long-Typ auf 0 gesetzt wird. Der restliche Teil der Kalkulation macht nur eines: das Resultat verfälschen. Hier mal ein Beispiel (moon ist mein Test-Host):

    EDIT: Das Resultat wird nicht verfälscht, ich ziehe diese Aussage zurück. Aber das Resultat sollte das gleiche sein, wie mein erster Code.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    [root@localhost ~]# time { ./porttest -i moon -p 90 -v -t 500; }
    resolved address: 192.168.178.33
    timeout is 0 seconds, 500000000 useconds
    Connection refused
     
    real    0m1.008s
    user    0m0.000s
    sys     0m0.006s
     
    [root@localhost ~]# time { ./porttest -i moon -p 80 -v -t 500; }
    resolved address: 192.168.178.33
    timeout is 0 seconds, 500000000 useconds
    Success
     
    real    0m0.018s
    user    0m0.001s
    sys     0m0.005s
     
    [root@localhost ~]# time { ./porttest -i moon -p 80 -v -t 250; }
    resolved address: 192.168.178.33
    timeout is 0 seconds, 250000000 useconds
    Success
     
    real    0m0.021s
    user    0m0.000s
    sys     0m0.006s
     
    [root@localhost ~]# time { ./porttest -i moon -p 90 -v -t 250; }
    resolved address: 192.168.178.33
    timeout is 0 seconds, 250000000 useconds
    Connection refused
     
    real    0m1.009s
    user    0m0.000s
    sys     0m0.007s

    Das ist übrigens mit dem Code von onlyfoo getestet. EDIT: Port 80 ist erreichbar, Port 90 nicht.

    Grüße und trotzdem Danke an alle, ich hab so langsam das Gefühl, das kann derart nicht gelöst werden. Ich werde mir mal pselect() ansehen.
    Geändert von saftmeister (17.07.10 um 17:16 Uhr) Grund: Richtigstellung
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  9. #9
    OnlyFoo OnlyFoo ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    470
    Okay hab deinen Fehler.
    tim ist bereits in Milisekunden, also muss nur noch mit 1000 multipliziert werden, um Mikrosekunden zu erhalten:
    Code c:
    1
    2
    3
    4
    5
    
    if(tim >= MINIMAL_CONNECTION_TIMEOUT && tim <= MAXIMAL_CONNECTION_TIMEOUT)
            {
              timeout.tv_sec = tim / 1000;
              timeout.tv_usec = (tim % 1000) * 1000;
            }

    Und 500 / 1000 ist übrigens nicht 0.2... Und die Rechnung macht schon sinn. Spiel das mal für tim = 2500ms durch
    olli@laptop:/tmp$ time ./a.out -i google.de -p 1234 -v -t 2500
    resolved address: 209.85.229.104
    timeout is 2 seconds, 500000 useconds
    Connection timed out

    real 0m2.525s
    user 0m0.000s
    sys 0m0.000s
    saftmeister bedankt sich. 

  10. #10
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Du hast recht, ich hab mich bei den Einheiten verhaspelt. Außerdem hast du recht, es sind 0,5

    Desweiteren habe ich mich schon korrigiert, deine Rechnung ist korrekt.

    Danke also noch mal...
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

Ähnliche Themen

  1. select-box1 ändern -> select-box2 nimmt selben wert na
    Von The_MACman im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 15.06.06, 00:34
  2. Select Inhalt und Sichtbarkeit abhängig von vorhergehendem Select
    Von LongDonJohn im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 07.04.06, 12:01
  3. Antworten: 8
    Letzter Beitrag: 18.05.05, 15:43
  4. Timeout
    Von twisthead im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 22.03.05, 18:28
  5. neues Select nach select aus mysql
    Von mrbong im Forum PHP
    Antworten: 15
    Letzter Beitrag: 14.10.04, 00:05