Una ventaja de las conexiones simultáneas puede darle (sujeto a las mismas advertencias mencionadas por paloma y Brian) es que podrá superar mejor el problema de tener una ventana de recepción de TCP demasiado pequeña.
El principio al que se refiere esto es bandwidth delay product. (Hay una explicación más detallada here).
Breve resumen: en entornos de alta latencia y gran ancho de banda, las comunicaciones confiables como TCP suelen estar limitadas por la cantidad de datos en vuelo en un momento dado. Las conexiones múltiples son una forma de evitar esto, ya que el producto de demora de ancho de banda se aplica a cada conexión individualmente.
En más detalle, considere lo siguiente: tiene un ancho de banda extremo a extremo de 10^8 bits por segundo (10 megabits/segundo) y un retraso de ida y vuelta de 100 ms (0,1 segundos). Por lo tanto, puede haber hasta 10^7 bits (10 megabits = ~ 1.25 megabytes) de datos enviados antes de que el acuse de recibo del primer bit de datos haya vuelto al remitente.
Esto variará según la pila TCP de su sistema operativo, pero un valor no muy común para el tamaño de ventana de recepción TCP es de 64Kbytes. Obviamente, esto es demasiado pequeño para permitirle hacer un uso completo del ancho de banda de extremo a extremo; una vez que se han enviado 64kbytes (512kbits) de datos, su proceso de envío esperará una actualización de ventana del receptor que indique que se han consumido algunos datos antes de poner más datos en el cable.
Al tener múltiples sesiones TCP abiertas se soluciona esto en virtud del hecho de que cada sesión TCP tendrá sus propios buffers de envío/recepción.
Por supuesto, en Internet es difícil determinar el verdadero ancho de banda disponible de extremo a extremo, debido al tamaño de la ventana TCP, contención, etc. Si puede proporcionar algunas cifras de muestra, podemos ser capaces de ayuda más
La otra opción que debe tener en cuenta es establecer una ventana de recepción más grande al crear su socket, ya sea globalmente utilizando una configuración de sistema operativo o en base a un socket utilizando las opciones de socket.
Mi aplicación está transfiriendo datos unidireccionalmente sin necesidad de tener conversaciones a nivel de aplicación. Simplemente presionando datos en el socket remoto. – JtR
Estoy probablemente fuera de ken aquí, pero si no es tan difícil, la manera más segura es establecer una prueba, ¿eh? ciertamente parece que hay potencial allí, dado que es de una manera. – dove
¿Está buscando un socket confiable (basado en conexión)? De lo contrario, posiblemente usar UDP en lugar de TCP podría ayudar? – AshtonKJ