sudo netstat - antp não mostrando PID

0

Eu estou testando coisas com sockets e eu encontrei aquele caso estranho:

eu codifiquei muito simples servidor tcp em c, eu fiz isso bloco depois de aceitar (), só para ver o que acontece ao aceitar várias tentativas de conexão ao mesmo tempo:

Aqui está um trecho do código do servidor:

//listen()
if( (listen(sock,5)) == -1) {
  perror("listen");
  exit(-1);
}

//accept()
if( (cli = accept(sock, (struct sockaddr *) &client, &len)) == 1 ){
  perror("accept");
  exit(-1);
}

printf("entrez un int : ");
scanf("%d",&toto);

quando o servidor pede ao usuário para digitar um número inteiro, eu tento conectar vários clientes com o telnet.

Fort o primeiro, tudo está bem:

root@[...] :/home/[...]/workspace/sockets# netstat -antp | grep 10003
tcp        0      0 0.0.0.0:10003           0.0.0.0:*               LISTEN      25832/toto      
tcp        0      0 127.0.0.1:10003         127.0.0.1:51166         ESTABLISHED 25832/toto      
tcp        0      0 127.0.0.1:51166         127.0.0.1:10003         ESTABLISHED 25845/telnet

mas depois do primeiro, apesar de eu ser root, existem algumas conexões que eu não posso ver o processo possuindo ele e seu pid:

root@[...] :/home/[...]/workspace/sockets# netstat -antp | grep 10003
tcp        0      0 0.0.0.0:10003           0.0.0.0:*               LISTEN      25832/toto      
tcp        0      0 127.0.0.1:10003         127.0.0.1:51166         ESTABLISHED 25832/toto      
tcp        0      0 127.0.0.1:51166         127.0.0.1:10003         ESTABLISHED 25845/telnet    
tcp        0      0 127.0.0.1:10003         127.0.0.1:51168         ESTABLISHED -               
tcp        0      0 127.0.0.1:51168         127.0.0.1:10003         ESTABLISHED 25852/telnet

um terceiro:

root@[...] :/home/[...]/workspace/sockets# netstat -antp | grep 10003
tcp        0      0 0.0.0.0:10003           0.0.0.0:*               LISTEN      25832/toto      
tcp        0      0 127.0.0.1:10003         127.0.0.1:51166         ESTABLISHED 25832/toto      
tcp        0      0 127.0.0.1:51166         127.0.0.1:10003         ESTABLISHED 25845/telnet    
tcp        0      0 127.0.0.1:10003         127.0.0.1:51172         ESTABLISHED -               
tcp        0      0 127.0.0.1:10003         127.0.0.1:51168         ESTABLISHED -               
tcp        0      0 127.0.0.1:51168         127.0.0.1:10003         ESTABLISHED 25852/telnet    
tcp        0      0 127.0.0.1:51172         127.0.0.1:10003         ESTABLISHED 25860/telnet

Eu tentei novamente alguns dias depois com netstat -antpe como root e aqui está o que eu recebi:

root@[...] :/home/[...]/workspace/sockets# netstat -antpe | grep 10003
tcp        0      0 0.0.0.0:10003           0.0.0.0:*               LISTEN      1000       327680      22399/toto      
tcp        0      0 127.0.0.1:33286         127.0.0.1:10003         ESTABLISHED 1000       417202      22884/telnet    
tcp        0      0 127.0.0.1:10003         127.0.0.1:33046         ESTABLISHED 0          0           -               
tcp        0      0 127.0.0.1:10003         127.0.0.1:33286         ESTABLISHED 0          0           -               
tcp        0      0 127.0.0.1:33044         127.0.0.1:10003         ESTABLISHED 1000       332810      22402/telnet    
tcp        0      0 127.0.0.1:33046         127.0.0.1:10003         ESTABLISHED 1000       331200      22410/telnet    
tcp        0      0 127.0.0.1:10003         127.0.0.1:33044         ESTABLISHED 1000       332801      22399/toto

como é que um processo ou uma conexão pode ter um inode de 0? Alguém pode me explicar o que está acontecendo?

    
por joseph M'Bimbi-Bene 27.01.2018 / 12:08

1 resposta

0

O Linux usa uma abordagem de duas filas para o backlog de escuta. Isso significa que, além das conexões completas (5 como em seu código), pode haver uma fila de conistions incomplete , em que o handshake de 3 vias ainda não foi concluído. / p>

As conexões neste estado ainda não estão atribuídas a um processo, então elas pertencem ao kernel, resultando apenas em um ID de processo 0. Isso me engana em um aplicativo Mono / .NET, onde eu estava procurando por um bug no Mono , isso foi na verdade um comportamento por projeto do kernel.

Veja aqui para as duas filas detalhes da abordagem.

    
por 27.01.2018 / 12:57