여러 포트에서 수신 대기하는 non-blocking python udp 서버를 구현하려고합니다.non-blocking python udp 여러 포트 wierd 예외를 구현하는 시도
나는이 Stackover posting에 몇 가지 코드를 발견하여 여러 소켓에서 수신 대기하도록 수정했습니다.
내 코드는 다음과 같습니다. ,
/udp_non_blocking_listener.py
[<socket._socketobject object at 0xb72804fc>, <socket._socketobject object at 0xb7280534>]
Listening on port [7777, 7778]
Connection from ('127.0.0.1', 41237)
Traceback (most recent call last):
File "./udp_non_blocking_listener.py", line 27, in <module>
client_socket, address = s.accept()
File "/usr/lib/python2.7/socket.py", line 202, in accept
sock, addr = self._sock.accept()
socket.error: [Errno 22] Invalid argument
난 그냥 파이썬 비 차단 API에 시작 해요 :
#!/usr/bin/python
import select
import socket
ports_list=[7777,7778]
def make_socket(number):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', number))
sock.listen(5)
return sock
read_list= map(lambda x: make_socket(x), ports_list)
print(read_list)
print "Listening on port %s" % ports_list
while True:
readable, writable, errored = select.select(read_list, [], [])
for s in readable:
if s in read_list:
client_socket, address = s.accept()
read_list.append(client_socket)
print "Connection from", address
else:
data = s.recv(1024)
if data:
s.send(data)
else:
s.close()
read_list.remove(s)
나는 다른 콘솔
$ netcat localhost 7778
dsa
에서 netcat을 실행하여 테스트 그러나 그것은과 같이, borks 이런 일을하는 관용적 인 방법은 무엇입니까?
이상한 솔루션 ... 당신은 오히려 스레드를 사용해야하며, 각각 하나 개의 소켓 전에서 수신한다 – ddzialak