Es gibt sowohl Sende- als auch Empfangspuffer. Die können schnell mal voll sein, wenn man ohne Pause Daten rausschiebt.
Als erweiterte Sendefunktion würde ich sowas hier machen:
Code:
Procedure.i sendNetworkDataEx(hClient.i, *buffer, length.i, timeout.i = 10000)
Protected result.i, time.i = ElapsedMilliseconds() + timeout, bytesSent.i = 0
Repeat
result = SendNetworkData(hClient, *buffer + bytesSent, length - bytesSent)
If result = -1 Or result = 0
; Warte, wenn nichts gesendet werden konnte
Delay(10)
Continue
Else
; Ansonsten resette das Timeout und aktualisiere bytesSent
time.i = ElapsedMilliseconds() + timeout
bytesSent += result
EndIf
If ElapsedMilliseconds() > time
; Wurde das Timeout erreicht, brich ab und gib zurück wie viel gesendet werden konnte.
ProcedureReturn bytesSent
EndIf
Until bytesSent = length
ProcedureReturn bytesSent
EndProcedure
Falls du auch ReceiveNetworkData nutzt, musst du damit genauso verfahren. Denn damit erhältst du die Daten auch nur Päckchenweise und nicht alle auf einmal.
'localhost' ist übrigens ein Spezialfall unter Linux. Das ist nur das
Loopback-Device, also kein echtes physisches Netzwerk. Das hat keine spezifischen Sende- und Empfangspuffer.
Zitat:
Gestern Abend ging das generell nur in mehreren SendNetworkData()-Durchgängen. Liegt es vielleicht daran, dass im Moment weniger los ist im Netz/bei strato?
Da du eine VM hast, teilst du dir deine Resourcen natürlich auch mit anderen VMs auf dem selben Host. Vielleicht hat nicht jede VM ihren eigenen physischen 100 MBit/s-Port, sondern alle laufen gemeinsam über einen 10 GBit/s-Port oder ähnliches. Dann kann das natürlich zu starken Schwankungen führen. Abgesehen davon tätigt auch Linux von sich aus immer wieder externe Anfragen um zum Beispiel nach neuen Updates zu suchen. Das kann sich alles auswirken. Und deswegen musst du für alle Eventualitäten gewappnet sein. Auch Timeouts sind wichtig, falls jemand mal in Mitten einer Übertragung den Stecker zieht oder das WLAN verliert. Dann kann keine der beiden Seiten der anderen mitteilen, dass sie jetzt weg ist. Dafür braucht es dann Timeouts um die Verbindung selbst nach einer Weile zu kappen.