2010-05-05 24 views
8

¿Cómo aumentar la ventana de recepción TCP para un socket específico? - Sé cómo hacerlo para todos los sockets estableciendo la clave de registro TcpWindowSize, , pero ¿cómo puedo hacer eso para uno específico?Aumente la ventana de recepción TCP para un socket específico

Según MSFT's documents, el camino es

Llamar a los sockets de Windows funcionan setsockopt, que establece la reciben ventana en función de cada toma.

Pero en setsockopt, se menciona sobre SO_RCVBUF:

Especifica el buffer espacio total por socket reservado para los recibe. Esto es no relacionado con SO_MAX_MSG_SIZE y no corresponde al tamaño de la ventana de recepción de TCP.

¿Entonces es posible? ¿Cómo?

Gracias.

Respuesta

5

SO_MAX_MSG_SIZE es para UDP. Aquí es de MSDN:

SO_MAX_MSG_SIZE - Devuelve el tamaño máximo de los mensajes salientes para sockets orientados a mensajes soportados por el protocolo. No tiene significado para sockets orientados a flujo.

También es no configurable.

Para TCP solo use SO_(SND|RCV)BUF.

1

Estoy bastante seguro de que SO_RCVBUF es lo que desea. El primer enlace dice que SO_RCVBUF tiene la más alta prioridad para determinar el tamaño de la ventana TCP por encima de todo lo establecido en el sistema. Por la forma en que lo estoy leyendo, creo que la segunda parte dice que el tamaño SO_RCVBUF no tiene que coincidir con el tamaño de ventana de recepción del sistema. En otras palabras, puede ser un tamaño diferente que establezca.

+0

Gracias. ¿Y hay alguna manera de establecer SO_MAX_MSG_SIZE? – rkellerm

0

Debe tener cuidado al ajustar esto y probar los resultados. Windows Vista y versiones posteriores tienen una característica de ajuste automático de tamaño de ventana adaptativa inteligente que ajusta específicamente el tamaño de la ventana para que funcione bien en redes LAN y redes largas como 3G y redes de alta pérdida. Si configura el tamaño de la ventana, anulará esto para que Windows ya no pueda ajustar el tamaño de la ventana automáticamente. Esto puede dañar su rendimiento si alguna vez necesita ejecutar una red de latencia particularmente alta, como una red celular.

Cuestiones relacionadas