2012-09-27 1 views
5

Ho un server gestito da un evento (richiesta di protocollo di risposta - simile a HTTP) che utilizza socket non bloccanti. Ho testato letture parziali scrivendo un client che invia la richiesta in blocchi discreti dopo ogni pochi secondi. Come faccio a testare le scritture parziali, ad esempio, devo scrivere 100 byte e quindi inviare i ritorni delle chiamate con solo 10 byte scritti.Come forzare le scritture parziali per testare un server di rete

Sto scrivendo client basati su Perl. Questo è su SSL ma ai fini di questa domanda, sto bene con le scritture parziali su TCP.

risposta

0

Usa controllo di flusso TCP: fa in modo che il client legga molto lentamente dal socket, quindi il buffer di invio del socket del mittente (server) si riempie di dati.

2

cercare di ridurre la dimensione del buffer di uscita:

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

Questo dovrebbe far inviare l'output solo una parte del buffer.

0

Scrivere molti dati molto rapidamente.

Rendere il buffer di uscita molto piccolo (come suggerito da Jan)

o

creare la propria funzione di invio

esempio

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); 
} 

Che invierà sempre 100 byte, ad eccezione dell'invio di 100 < byte. Altrimenti invierà ciò che gli dai, se possibile. Dopo aver verificato che la gestione della trasmissione parziale funzioni correttamente, cambia la chiamata in mysend di nuovo nell'invio normale ed elimina mysend dal tuo codice hackary.