Frage zu Tutorial von www.c-worker.ch (TCP/UDP Socket Programmierung)



  • Der Test auf WSAEWOULDBLOCK ist doch quatsch, er setzt den Socket doch nirgendwo in den Non-Blocking Modus.



  • o.O schrieb:

    Der Test auf WSAEWOULDBLOCK ist doch quatsch, er setzt den Socket doch nirgendwo in den Non-Blocking Modus.

    Das stimmt, allerdings schadet er auch nicht - sollte er mal non-blocking arbeiten, würde er sonst vergessen, das einzubauen. Und da die Überprüfung von WSAGetLastError sowieso nur zustande kommt, wenn es einen Fehler gibt, gibt es auch keinen Verlust bei der Laufzeit. Ich jedenfalls finde den Einbezug von WSAEWOULDBLOCK wesentlich flexibler und irgendwie "allgemeiner". Ist im Endeffekt sowieso _seine_ Entscheidung und ich glaub ich schrieb auch schon, dass es im Fall der blockierenden Sockets nichts bringt.



  • Aber so wie du die WSAEWOULDBLOCK Situation behandelst wäre es ja eh "falsch". Es würde ja direkt wieder recv aufgerufen werden. Wenn man mit Non-Blocking Sockets arbeitet ruft man ja normalerweise recv erst wieder auf wenn select sagt das Daten da sind.



  • Hallo,

    Badestrand schrieb:

    o.O schrieb:

    Der Test auf WSAEWOULDBLOCK ist doch quatsch, er setzt den Socket doch nirgendwo in den Non-Blocking Modus.

    Das stimmt, allerdings schadet er auch nicht - sollte er mal non-blocking arbeiten, würde er sonst vergessen, das einzubauen. Und da die Überprüfung von WSAGetLastError sowieso nur zustande kommt, wenn es einen Fehler gibt, gibt es auch keinen Verlust bei der Laufzeit. Ich jedenfalls finde den Einbezug von WSAEWOULDBLOCK wesentlich flexibler und irgendwie "allgemeiner". Ist im Endeffekt sowieso _seine_ Entscheidung und ich glaub ich schrieb auch schon, dass es im Fall der blockierenden Sockets nichts bringt.

    das ist natuerlich Ansichtssache, aber ich bin der Meinung, dass unnoetiger
    Code nichts in den Sourcen zu tun hat.

    gruss
    v R



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich hab jetzt nicht alles gelesen, doch wenn du nicht auf Threads oder dergleichen zurückgreifen möchtest, kannst du ja, Windowsprogrammierung vorrausgesetzt, WSAAsyncSelect verwenden.
    Dann kümmert sich Windows um die "nichtblockerei" und du bekommst immer eine Nachricht Geschickt wenn was passiert.

    Jedoch müsstest du dich dann noch informieren wie Windows das genau macht.
    Ich selbst habe mal gelesen, dass Windows dafür selbstständig eigene Threads anlegt, jedoch habe ich woanders mal gehört, dass WSAAsyncSelect mit nonblocking Sockets arbeitet und das wolltest du ja nicht.


Anmelden zum Antworten