2016-07-26 1 views
0
  • socket.getaddrinfo()을 사용하여 도메인 이름을 확인하는 중입니다. 내가 전달하는 경우 :

host = 'www.google.com', port = 80, family = socket.AF_INET, type = 0, proto = 0, flags = 0SOCK_STREAM을 사용하여 Python에서 예상치 못한 socket.getaddrinfo 동작이 발생했습니다.

난 당신이 기대하는 것 같은 소켓 정보를 정기적으로 한 쌍의 SocketKind.SOCK_DGRAM 하나 (UDP에 대한) 및 및 SocketKind.SOCK_STREAM (TCP)와 다른를 얻을.

  • proto를 socket.IPPROTO_TCP으로 설정할 때 예상대로 TCP로만 범위를 좁 힙니다.

  • 그러나 proto = socket.SOCK_STREAM (작동하지 않아야 함)을 사용하면 SocketKind.SOCK_RAW가 반환됩니다.

  • 또한 파이썬에서는 proto = socket.IPPROTO_RAW을 사용할 수 없습니다. '잘못된 힌트'가 나타납니다.

여기에 무슨 일이 일어나고 있는지에 대한 의견이 있으십니까?

답변

0

socket.SOCK_STREAMtype 필드에 전달되어야합니다. proto 필드에서 그것을 사용하는 것은 아마 당신이보고있는 것입니다 매우 임의의 효과가 있습니다. Proto는 IPPROTO 상수 만 사용합니다. 원시 소켓의 경우 type = socket.SOCK_RAW을 사용해야합니다. 나는 확실하지 않다. getaddrinfo은 TCP와 UDP를 주로 지원한다.

질문에 실제 코드가있는 것이 좋습니다. 그 때 무슨 일이 일어나고 있는지 더 쉽게 볼 수 있습니다.

관련 문제