¿Está sondeando cada uno de sus sockets TCP con “select ()” individualmente (lo que me parece increíblemente ineficiente) o está verificando cuáles de sus sockets TCP tienen datos listos configurando la (s) máscara (s) de bits adecuadamente?
En las versiones de select () con las que estoy familiarizado, el parámetro de tiempo de espera le permite esperar valores de milisegundos, aunque lo bien que el núcleo respeta eso es otra cuestión.
Como “select ()” solo le dice que los datos están disponibles, entonces realmente no puede saberlo, especialmente si hay datos no leídos disponibles en varios sockets a la vez.
- ¿De qué están hechos los paquetes de datos?
- ¿Cómo se puede acceder a un disco duro conectado a través del puerto USB de un segundo enrutador dentro de una red?
- ¿La dirección IP de una computadora cambia cada vez que inicia sesión en Internet?
- ¿Cuáles son los medios utilizados para identificar a un usuario de una manera única, aparte de las cookies y la dirección IP?
- ¿Qué se entiende por dirección IP en un puerto?
Tampoco tiene en cuenta cómo se comporta TCP cuando los datos se pierden y se retransmiten.
Si realmente necesita distinguir el orden en que llegan los datos en un socket TCP, probablemente debería usar un modelo de programación con hilos y tener hilos separados para cada socket TCP, o tener un hilo que reempaquete los datos que vienen del Los sockets TCP en algún tipo de estructura de datos adecuada con las marcas de tiempo apropiadas, y esperamos que ese proceso nunca se demore por otro procesamiento.