какой номер порта хоста, когда мы используем accept () и connect () в программировании сокетов C - PullRequest
2 голосов
/ 10 ноября 2011

Руководство по сетевому программированию Beej объясняет метод accept () следующим образом:

Что произойдет так: кто-то далеко-далеко попытается подключить () к вашей машине напорт, который вы слушаете () на.Их соединение будет поставлено в очередь в ожидании подтверждения ().Вы вызываете accept () и говорите, чтобы получить ожидающее соединение.Он вернет вам новый дескриптор файла сокета для использования в этом единственном соединении!

но как мы узнаем номер порта "совершенно нового сокета"?

Ответы [ 4 ]

1 голос
/ 19 января 2016

Он не назначает новый порт.Принятый сокет использует тот же порт, что и прослушивающий сокет.

1 голос
/ 11 ноября 2011

Я думаю, что getpeername вернет эту информацию

1 голос
/ 30 ноября 2013

Из документов GNU о принятии.

                newfd = accept (sockfd, (struct sockaddr *) &clientname, &size);
                if (newfd < 0) {
                    perror ("accept");
                    exit (EXIT_FAILURE);
                }

В файле accept sockaddr.in Struc вы найдете локальный порт.

                fprintf (stderr, "Server: connect from host %s, port %hd.\n",
                    inet_ntoa (clientname.sin_addr),
                    ntohs (clientname.sin_port));
1 голос
/ 11 ноября 2011

Передайте принятый SOCKET на getsockname() для получения своего локального IP / порта и на getpeername() для получения своего удаленного IP / порта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...