Skip to contentSkip to conversation

TCP retransmission : how to detect from an application ?

DISCUSSION Paul Rolland 2 participants 2 messages Jun 2, 2004

lore
Share & tools
lore
#0 lore raw

Hello,

I've an application that is establishing TCP connection, and exchanges some data.
However, from time to time, I suspect there are some packet loss, which are corrected by the kernel (hell, TCP is reliable, isn't it :-), but I'd like to know if an application can detect this (well, I don't want to be notified of a packet loss once detected, but I'd like to get some stats before closing
the connection).

Is there something possible ? Some ioctl ? Some /proc/magic-interface ?

Regards,
Paul

Paul Rolland, rol(at)as2917.net
ex-AS2917 Network administrator and Peering Coordinator

--

Please no HTML, I'm not a browser - Pas d'HTML, je ne suis pas un navigateur

"Some people dream of success... while others wake up and work hard at it"

#1 lore raw
Quoted 5 lines · Paul Rolland

corrected by the kernel (hell, TCP is reliable, isn't it :-), but I'd like to know if an application can detect this (well, I don't want to be notified of a packet loss once detected, but I'd like to get some stats before closing
the connection).

#include <linux/tcp.h>

struct tcp_info info;

getsockopt (... TCP_INFO ... &info ...);

and you get all of this (you'll have to see net/ipv4/tcp.c to see how it all gets filled in.. I'm not aware of better documentation than that):

struct tcp_info

{
    __u8    tcpi_state;
    __u8    tcpi_ca_state;
    __u8    tcpi_retransmits;
    __u8    tcpi_probes;
    __u8    tcpi_backoff;
    __u8    tcpi_options;
    __u8    tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;

    __u32   tcpi_rto;
    __u32   tcpi_ato;
    __u32   tcpi_snd_mss;
    __u32   tcpi_rcv_mss;

    __u32   tcpi_unacked;
    __u32   tcpi_sacked;
    __u32   tcpi_lost;
    __u32   tcpi_retrans;
    __u32   tcpi_fackets;

    /* Times. */
    __u32   tcpi_last_data_sent;
    __u32   tcpi_last_ack_sent;     /* Not remembered, sorry. */
    __u32   tcpi_last_data_recv;
    __u32   tcpi_last_ack_recv;

    /* Metrics. */
    __u32   tcpi_pmtu;
    __u32   tcpi_rcv_ssthresh;
    __u32   tcpi_rtt;
    __u32   tcpi_rttvar;
    __u32   tcpi_snd_ssthresh;
    __u32   tcpi_snd_cwnd;
    __u32   tcpi_advmss;
    __u32   tcpi_reordering;
};