Могу ли я найти номер порта, если у меня есть только розетка? - PullRequest
3 голосов
/ 17 марта 2012

Могу ли я найти номер порта, если у меня есть только розетка? Я перехватываю вызовы ws2_32, и похоже, что SOCKET пытается отправить данные, но у меня нет информации об этом SOCKET. Я хочу знать, есть ли в любом случае, чтобы получить sockaddr или порт только из розетки?

Я столкнулся с подобной проблемой с сокетом UDP, но я исправил ее, просто получив номер порта от sockaddr, когда он собирался отправлять данные, и обновил мою информацию об этом. Но проблема в том, что у меня нет ничего, кроме СНОКЕТА.

Программа создает SOCKET с портом 0, а затем назначает его новому порту. К тому времени, когда это происходит, информация моей программы о сокете уже установлена ​​с использованием порта 0, что не соответствует действительности. Итак, мне нужно найти способ либо ... A: Найти порт на основе SOCKET, либо B: Когда Windows обновляет порт, я могу подключить его и обновить порт.

1 Ответ

3 голосов
/ 17 марта 2012

Есть две функции, которые делают именно то, что вы хотите:

  1. getpeername - получает информацию о другом конце TCP-соединения
  2. getsockname - получает информацию о сокете (локальный конец) для TCP и UDP
...