2012-09-27 10 views
5

Tengo un servidor escrito por evento (protocolo de respuesta de solicitud - similar a HTTP) usando sockets no bloqueantes. Probé lecturas parciales escribiendo a un cliente que envía la solicitud en fragmentos discretos cada pocos segundos. Cómo pruebo las escrituras parciales, es decir, necesito escribir 100 bytes y luego enviar devoluciones de llamadas con solo 10 bytes escritos.Cómo forzar escrituras parciales para probar un servidor de red

Escribo clientes basados ​​en perl. Esto es a través de SSL, pero a los efectos de esta pregunta, estoy de acuerdo con escrituras parciales en TCP.

Respuesta

0

Utilice el control de flujo TCP: haga que su cliente lea desde el socket muy lentamente, de modo que el búfer de envío del zócalo del remitente (servidor) se llene de datos.

2

tratar de reducir el tamaño del búfer de salida:

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

Esto debería hacer que enviar la salida sólo una parte de la memoria intermedia.

0

Escribe muchos datos muy rápidamente.

hace el buffer de salida muy pequeña (como se sugiere por Jan)

o

Crear su propia función de envío

por ejemplo,

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

Que siempre enviará 100 bytes cortos excepto si envía < 100 bytes. De lo contrario, enviará lo que le des si es posible. Una vez que haya verificado que el manejo parcial de los envíos funciona correctamente, cambie la llamada para devolverla al envío normal y elimine mysend de su código de hackary.

Cuestiones relacionadas