here의 코드를 사용하여 UDP 펀칭을 테스트하고 있습니다. 그것은 리눅스에서 작동하지만 Windows에서 오류를보고합니다.python select.select() on Windows
while True:
rfds, _, _ = select([0, sockfd], [], []) # sockfd is a socket
if 0 in rfds:
data = sys.stdin.readline()
if not data:
break
sockfd.sendto(data, target)
elif sockfd in rfds:
data, addr = sockfd.recvfrom(1024)
sys.stdout.write(data)
그리고 오류 MSG를 : 여기에 오류가 발생하는 코드이다
Traceback (most recent call last):
File "udp_punch_client.py", line 64, in <module>
main()
File "udp_punch_client.py", line 50, in main
rfds, _, _ = select([0, sockfd], [], [])
select.error: (10038, '')
이 오류는 Windows에서 select
구현해야 할 몇 가지 일을 가지고 알고, 모두 인용이 :
그래서 나는 두 가지 질문 있어요? 이것은 일종의 자주 사용되는 기법입니까?참고 Windows의 파일 개체는 허용되지 않지만 소켓은 있습니다. Windows에서 기본 select() 함수는 WinSock 라이브러리에서 제공되며 WinSock의 이 아닌 파일 설명자를 처리하지 않습니다.
- 는
[0, sockfd]
에서0
은 무엇을 의미 하는가 :
select
이 Windows의 socket
에서만 작동하는 경우 Windows와 호환되는 코드를 만드는 방법은 무엇입니까?감사합니다.
'0'은'stdin'의'fd'입니다. [File Descriptors] (http://en.wikipedia.org/wiki/File_descriptor) – tmr232
@ tmr232 코드를 수정하는 방법은? – laike9m
@ J.F.Sebastian Alright – laike9m