Como posso saber se um processo (no Linux) que está abrindo conexões TCP está configurando o sinalizador TCP_NODELAY

3

Eu tenho um aplicativo que estou testando / depurando que eu gostaria de saber se as conexões que estão abrindo tiveram o conjunto TCP_NODELAY. Existe uma maneira de fazer isso? Usando o netstat para ver os detalhes de uma conexão aberta? É algo como strace ou sistema toque minha melhor opção?

    
por Michael Barker 24.01.2013 / 08:30

1 resposta

4

Infelizmente você não pode depois que o soquete já tenha sido aberto. A informação que o kernel do Linux distribui carece desta informação.

Veja o link

Você pode rastrear seu código via strace e procurar por linhas semelhantes a esta (tiradas do stracing do cliente mysql conectando-se a um servidor mysql)

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
fcntl(3, F_SETFL, O_RDONLY)             = 0
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
connect(3, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
setsockopt(3, SOL_SOCKET, SO_RCVTIMEO, "031
lsof -a -p PID -i 4 -T f
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
fcntl(3, F_SETFL, O_RDONLY)             = 0
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
connect(3, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
setsockopt(3, SOL_SOCKET, SO_RCVTIMEO, "031
lsof -a -p PID -i 4 -T f
%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 16) = 0 setsockopt(3, SOL_SOCKET, SO_SNDTIMEO, "031%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 16) = 0 setsockopt(3, SOL_IP, IP_TOS, [8], 4) = 0 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0 setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 16) = 0 setsockopt(3, SOL_SOCKET, SO_SNDTIMEO, "031%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%", 16) = 0 setsockopt(3, SOL_IP, IP_TOS, [8], 4) = 0 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0 setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0

Se você estiver em um sistema unixy BSD ou não-linux

%pre%

pode funcionar (consulte esta link pergunta semelhante).

    
por 25.01.2013 / 00:18

Tags