Windows Sockets...send() und recv()



  • Hallo zusammen.

    Wie kann ich mit send() das SYN-flag senden und wie kontrolliere ich, was bei recv() zurückkommt? (sorry für den sicherlich falschen ausdruck, aber ich versuche mich das erste mal an den sockets)

    ciao und danke im voraus.



    1. was für n SYN flag?
    2. wie kontrollieren? wann was kommt, was reinkommt?
      wann geht auf zwei weisen: wenn du blockierende sockets hast (standard) dann ist recv blokierend, heisst, das programm wartet solange bis etwas am sockel gelesen werden kann. wenn du nicht blokierende sockel hast musst du über select gehen (was ich dir aber eh empfehlen würde wg. timeoutfunktionen)
      was kommt rein? immer char werte 🙂 d.h. der buffer ist ein char buffer.die länge bestimmst du selbst: der 3. parameter bei recv ist die anzahl der bytes, die vom socket gelesen werden sollen. (falls du ganz neu im socket geschäft bist: umbedingt nach dem empfangen den buffer terminieren:
    char buffer[256];
    int ret = recv(sock, buffer, strlen(buffer));
    buffer[ret] = '\0';
    

    sonnst hast müll drinstehen

    ansonsten gibzs jede menge tuts die das gut erklären (www.zotteljedi.de)



  • Danke erst einmal. Wie erstelle ich denn nicht-blockierende Sockets?
    Und zwar habe ich gelesen, dass der client dem server (wahrscheinlich jedoch beim connect) ein SYN-Flag sendet und dieser mit ACK|SYN antwortet im Falle das eine Verbindung möglich ist. Oder eben mit RST falls nicht. Und ich wollte eben manuell dieses Flag senden und kontrollieren was der Server dann zurückgibt. (welches Flag)Hoffe jetzt ist es besser verständlich. (und ja, ich bin neu in den Sockets)

    Ciao.



  • ach ja, hat recv() nicht 4 Parameter?

    int recv (
    SOCKET s,
    char FAR* buf,
    int len,
    int flags
    );

    Parameters
    s [in] A descriptor identifying a connected socket.
    buf [out] A buffer for the incoming data.
    len [in] The length of buf.
    flags [in] A flag specifying the way in which the call is made.



  • ja du hast recht.
    jetz weis ich auch was für flag du meinst. aber ich glaube das wird auf low lvl ebene benutzt (kernel), um die tcp verbindung aufzubauen: das sogenante handshaking. wenn du da ran willst, muss di glaub ich dann raw sockets machen. (www.zotteljedi.de die socket tipps sind echt gut, da steht auch wie du non-blocking sockets machst). die flags die du recv mitgeben kannst sind anderer art. (z.b. MSG_PEEK nimmt nur vom anfang des empfangsqueue und löscht nicht raus (damit kannst z.b. history funktion machen))



  • Axo. Na dann danke ich dir schön. Werde mir die Socket-Tips mal durchlesen.


Anmelden zum Antworten