2016-07-26 6 views
0
  • Я занят попыткой использовать socket.getaddrinfo() для разрешения имени домена. Когда я прохожу в:

host = 'www.google.com', port = 80, family = socket.AF_INET, type = 0, proto = 0, flags = 0Неожиданное поведение socket.getaddrinfo в Python с использованием SOCK_STREAM

Я получаю пару сокетов Infos, как можно было бы ожидать, один с SocketKind.SOCK_DGRAM (для UDP) и, а другой с SocketKind.SOCK_STREAM (TCP).

  • Когда я установил прото к socket.IPPROTO_TCP я сужать его только TCP, как и ожидалось.

  • Однако, когда я использую proto = socket.SOCK_STREAM (это не должно работать), я возвращаю SocketKind.SOCK_RAW.

  • Кроме того, Python не позволит мне использовать proto = socket.IPPROTO_RAW - Я получаю «Плохие подсказки».

Любые мысли о том, что здесь происходит?

ответ

0

socket.SOCK_STREAM должно быть передано в поле . Использование его в поле proto, вероятно, имеет очень случайный эффект, который вы видите. Прото использует только константы IPPROTO. Для сырого сокета вы должны использовать type = socket.SOCK_RAW. Я не уверен, что getaddrinfo поддерживает это, хотя это в основном для TCP и UDP.

Возможно, вам лучше иметь какой-то фактический код в ваших вопросах. Гораздо легче понять, что происходит дальше.