Pelo que entendi, é isso que acontece quando um cliente faz uma solicitação de conexão:
- O servidor será vinculado a um número de porta específico. O número da porta está sempre vinculado a um processo de atendimento. Como apenas o servidor está escutando as conexões de entrada, não precisamos vincular no lado do cliente
- O servidor continuará ouvindo esse número da porta.
- O cliente enviará uma
connect()
solicitação. - O servidor aceitará a solicitação usando
accept()
. Assim que o servidor aceita a solicitação do cliente, o kernel aloca um número de porta aleatório para o servidor por mais temposend()
ereceive()
, como o mesmo número de porta no servidor não pode ser usado para enviar e ouvir, e a porta anterior ainda está ouvindo novas conexões
Dado tudo isso, como o servidor descobre em qual porta o cliente está recebendo? Sei que o cliente enviará segmentos TCP com uma porta de origem e uma porta de destino; portanto, o servidor usará a porta de origem desse segmento como porta de destino, mas que função o servidor chama para descobrir sobre essa porta? É isso accept()
?