Могу ли я найти номер порта, если у меня есть только SOCKET?

90
9

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


У меня возникла аналогичная проблема с UDP-сокетом, но я исправил ее, просто получив номер порта из sockaddr, когда он собирался отправить данные и обновил мою информацию об этом. Но проблема в том, что мне нечего скрывать, кроме SOCKET.


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

спросил(а) 2021-01-19T18:40:08+03:00 6 месяцев, 2 недели назад
1
Решение
89

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

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

ответил(а) 2021-01-19T18:40:08+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема