Pular para o conteúdo principal

De vez em quando, alguém faz a seguinte pergunta: “Adicionamos a porta do nosso aplicativo ao arquivo de serviços e agora outro aplicativo 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 os aplicativos possam chamar a função getservbyname para encontrar o número da porta associado a um serviço ou chamar a função getservbyport para encontrar o nome de um serviço associado a um número de porta. Não há nada que impeça que dois serviços diferentes sejam mapeados para o mesmo número de porta, embora a função getservbyport retorne apenas o primeiro. Também não há exigência de que um aplicativo chame getservbyname para descobrir qual porta deve usar. Um desenvolvedor de aplicativos pode simplesmente 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, a não ser usá-lo e somente se você não definir a opção de soquete REUSEADDR. Portanto, inicie seu aplicativo assim que possível após o STCP ser iniciado, antes que outro aplicativo ocupe sua porta.

 

Às vezes, o culpado não é outro aplicativo de servidor, mas um aplicativo cliente. A maioria dos aplicativos clientes não se vincula a uma porta local específica, mas como uma porta local é necessária, o STCP atribui uma do intervalo de portas dinâmicas (49152 – 65535). Se o seu aplicativo usa uma porta nesse intervalo, sugiro que você a altere para usar uma porta do intervalo registrado, 1024-49151. Essas portas só serão usadas se um aplicativo se conectar explicitamente a elas.

 

OK, vamos supor que existe outro aplicativo usando a porta do seu aplicativo; como você pode identificar qual é esse aplicativo e, mais importante, quem o iniciou? É um processo de três etapas:

 

  1. Execute o comando “netstat -numeric -all_sockets -PCB_addr” e identificar o intruso, neste caso, o número da porta que me interessa é 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 para a solicitação dump_onetcb o PCB do intruso, 8e3aa300. Isso identifica o dispositivo STCP associado ao 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 qual 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 pronto, agora basta entrar em contato com esse Barney Rubble e sugerir educadamente que ele use um número de porta diferente.

© 2024 Stratus Technologies.