Когда вы отправляете пакет UDP, как вы возвращаете назначенный системой исходящий порт? (Розетки BSD C) - PullRequest
3 голосов
/ 05 апреля 2011

Когда вы отправляете пакет UDP, как вы возвращаете назначенный системой исходящий порт?После отправки приведенного ниже пакета мне нужно немедленно подключиться и прослушать любой выбранный мной случайный порт, чтобы получить ответы на мою рассылку.

Ответы [ 2 ]

6 голосов
/ 05 апреля 2011

Вам не нужно искать порт - просто вызовите recv() или recvfrom() на сокете, который вы использовали для отправки, и он будет использовать тот же локальный порт (порт становится связанным, когда вы делаете sendto()).

Вы также можете позвонить getsockname() на отправляющем сокете, чтобы найти номер порта для информационных целей, но вы все равно должны использовать отправляющий сокет для получения - если вы этого не сделаете, между связыванием сокета и ответ возвращается из сети, что может привести к потере ответов.

1 голос
/ 05 апреля 2011

Полагаю, вы ищете getsockname(2) звонок:

   int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

DESCRIPTION
   getsockname() returns the current address to which the socket
   sockfd is bound, in the buffer pointed to by addr.  The addrlen
   argument should be initialized to indicate the amount of space
   (in bytes) pointed to by addr.  On return it contains the actual
   size of the socket address.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...