socket servidor programming ejemplos cliente tcp network-programming

servidor - Profundidad de cola de envío de TCP



tcp socket (3)

Algunos sabores de Unix pueden tener una forma API para hacer esto, pero no hay forma de hacerlo que sea portátil en diferentes variantes.

¿Cómo puedo descubrir cuántos bytes se han enviado a un socket TCP pero todavía no se han transferido al cable?

Mirando el diagrama aquí:

Me gustaría saber el total de las Categorías 2, 3 y 4, o el total de 3 y 4. Esto está en C (++) y tanto en Windows como en Linux. Idealmente, hay un ioctl que podría usar, pero no parece haber ninguno.


En Linux, consulte la página man para tcp (7).

Parece que puede obtener el número de bytes no transmitidos por ioctl (calcetín, SIOCINQ ...

Otras estadísticas podrían estar disponibles a partir de los miembros de la estructura devuelta por la llamada TCP_INFO getsockopt ().


Si desea determinar si desea agregar datos o no: no se preocupe, el envío se bloqueará hasta que los datos estén en la cola. Si no desea que se bloquee, puede indicarle que envíe (2):

send(socket, buf, buflen, MSG_DONTWAIT);

Pero esto solo funciona en Linux.

También puede configurar el socket como no bloqueante:

fcntl(socket, F_SETFD, O_NONBLOCK);

De esta forma, escribir devolverá un error (EAGAIN) si los datos no se pueden escribir en la secuencia.