Pular para o conteúdo principal

De vez em quando alguém faz a seguinte pergunta: "Acrescentamos nossa porta de aplicação ao arquivo de serviços e agora alguma outra aplicação está usando-a - por quê". A resposta é porque o arquivo de serviços não reserva números de porta. O arquivo de serviços existe para que as aplicações possam chamar a função getervbyname para encontrar o número da porta associada a um serviço ou chamar a função getervbyport para encontrar o nome de um serviço associado a um número de porta. Não há nada que impeça dois serviços diferentes de mapearem para o mesmo número de porta, embora a função getervbyport retorne apenas a primeira. Também não há nenhuma exigência de que uma chamada de aplicação getervbyname seja feita para descobrir qual porta ela deve estar usando. O desenvolvedor de uma aplicação pode apenas codificar um número de porta ou permitir que ele seja inserido como um parâmetro.

Não há como reservar um número de porta - além de usá-lo, e somente se você não definir a opção de soquete REUSEADDR; assim, inicie sua aplicação o mais rápido possível após o STCP ser iniciado, antes que essa outra aplicação agarre sua porta.

 

Às vezes o culpado não é outra aplicação do servidor, mas uma aplicação do cliente. A maioria das aplicações clientes não se liga a uma porta local específica, mas como é necessária uma porta local a STCP atribui uma da faixa de portas dinâmicas (49152 - 65535). Se sua aplicação usa uma porta nesta faixa, sugiro que você a mude para usar uma porta a partir da faixa registrada, 1024-49151. Estas portas só serão usadas se uma aplicação se vincular explicitamente a elas.

 

OK, vamos assumir que existe outra aplicação lá fora usando o porto de sua aplicação; como você pode identificar qual é a aplicação e, mais importante ainda, quem a iniciou? É um processo em três etapas:

 

  1. Execute o comando “netstat -numeric -all_sockets -PCB_addr” e identificar o interloperador, neste caso o número do porto em que estou interessado é 13592.
netstat -numeric -all_sockets -PCB_addr
Active connections (including servers)
PCB       Proto Recv-Q Send-Q Local Address Foreign Address
(state)
. . .
8e3aa300 tcp        0      0 *:13592          *:*          LISTEN
. . .
ready 13:50:12
  1. Execute o comando

“analyze_system -request_line 'match dv; dump_onetcb 8e3aa300' -quit”

passando ao dump_onetcb solicitar o PCB do interloper, 8e3aaa300. Isto identifica o dispositivo STCP associado com o soquete.
OpenVOS Release 17.0.1aj, analyze_system Release 17.0.1aj
Current process is 664, ptep 8E0EE800, Noah_Davids.CAC
sth_dvtx                 = 121 (stcp.m16_202)
  1. Execute o comando “who_locked #stcp.m16_202” para determinar que processo está usando o dispositivo.
stcp.m16_202:
Object is write locked by Barney_Rubble.Dev (login) on module
%vs#m1
executing stcp_calls.pm.

 

E aí está, tudo o que você precisa fazer agora é contatar este Barney Rubble e educadamente sugerir que ele use um número de porta diferente.

© 2024 Stratus Technologies.