none
WSASend thread-safe ? RRS feed

  • Allgemeine Diskussion

  • Frage... ist WSASend threadsafe? (ja, ich meine thread-safe und nicht atomar) ... ich nutze IMMER IOCPs, somit ist JEDER Socket overlapped geöffnet und ich sende IMMER genau exakt 1 Puffer! ... und das aber von mehreren Threads... die Reihenfolge der Verarbeitung, die Reihenfolge wie das ankommt ist mir alles total egal... das was aber nicht passieren darf ist ist a) ein Absturz (weil z.B. der interne Puffer nicht threadsafe ist oder sowas) und b) die Puffer dürfen nicht durchmischt werden (also ein Puffer muss als ein Block verarbeitet werden) ...

    ich glaube, dass b sowieso gewährleistet ist und a... also, alles in allem tippe ich drauf, dass es zu 99.99% funktionieren müsste... nur, ich habe keine Bestätigung und die Diskussionen in Foren reden immer von synchronen Sockets oder sonstigen komischen Situationen... die von mir genannte wird aber kaum in Betracht gezogen (sowieso, wenn es um overlapped I/O geht muss man immer raten, weil da zum Teil die Doku gar nicht passt... einiges ist völlig unmöglich was die beschreiben... das gefällt mir immer sehr gut) ...

    Ich muss jetzt aber für unser Projekt entscheiden, ob ich die WSASend gegenseitig abriegeln muss oder ob ich das laufen lassen kann. Bis jetzt hatten wir keine Probleme... kann aber Zufall sein.

    Freitag, 6. Dezember 2013 10:05

Alle Antworten

  • Hallo Rudolf,

    im Grunde sind alle WinAPI-Funktionen thread-safe (bis auf ein paar Ausnahmen wie GDI... ),

    also auch WSASend. Das zu sendende wir imho in einen internen Puffer kopiert, und dann stückweise in Paketen übers Netzwerk gesendet. Dein Puffer sollte also immer in einem Stück ankommen, nur die Reihenfolge ist halt nicht gewährleistet ( jenachdem welcher deiner Threads zuerst WSASend aufruft ).

    MfG,

    Turtlefight

    Samstag, 4. Januar 2014 21:09