2012-09-27 15 views
5

Ich habe einen ereignisgesteuerten Server (Request Response Protocol - HTTP wie) mit nicht blockierenden Sockets geschrieben. Ich habe Teillesevorgänge getestet, indem ich einen Client geschrieben habe, der die Anfrage alle paar Sekunden in diskreten Blöcken sendet. Wie teste ich partielle Schreibvorgänge, d. H. Ich muss 100 Bytes schreiben und dann Call Returns mit nur 10 geschriebenen Bytes senden.So erzwingen partielle Schreibvorgänge zum Testen eines Netzwerkservers

Ich schreibe Perl-basierte Clients. Dies ist über SSL, aber für die Zwecke dieser Frage bin ich ok mit partiellen schreibt auf TCP.

Antwort

0

Verwenden Sie TCP-Ablaufsteuerung - lassen Sie Ihren Client sehr langsam aus dem Socket lesen, so dass der Sender (Server) Socket senden Puffer mit Daten gefüllt wird.

2

Versuchen Sie, die Größe des Ausgangspuffers zu reduzieren:

err = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, 1) 

Dieser Ausgangsteil des Puffers nur senden machen sollte.

0

Schreiben Sie viele Daten sehr schnell.

die Ausgangspuffer sehr klein machen (wie von Jan vorgeschlagen)

oder

Erstellen Sie Ihre eigene Sendefunktion

z.B.

ssize_t mysend(int sockfd, const void *buf, size_t len, int flags) 
{ 
    int shortlen = len - 100 > 0 ? len - 100; len 
    return send(sockfd, buf, shortlen, flags); 
} 

Diese sendet immer 100 Bytes kurz, außer wenn < 100 Bytes gesendet werden. Sonst wird es senden, was du gibst, wenn es geht. Sobald Sie sich vergewissert haben, dass Ihre Partial-Send-Verarbeitung korrekt funktioniert, ändern Sie den Aufruf von mySend zurück zum normalen send und löschen Sie mySend aus Ihrem Hack-Code.

Verwandte Themen