Note that there are some explanatory texts on larger screens.

plurals
  1. POTrying to implement non-blocking python udp multiple ports getting wierd exception
    text
    copied!<p>I'm trying to implement a non-blocking python udp server which listens on multiple ports.</p> <p>I found some code in this <a href="https://stackoverflow.com/questions/5308080/python-socket-accept-nonblocking">Stackover posting</a> and modified it to listen on multiple sockets, so far, so good.</p> <p>My code is as follows.</p> <pre><code>#!/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) </code></pre> <p>I test it by running netcat in another console </p> <pre><code>$ netcat localhost 7778 dsa </code></pre> <p>But it borks, like so:</p> <pre><code>/udp_non_blocking_listener.py [&lt;socket._socketobject object at 0xb72804fc&gt;, &lt;socket._socketobject object at 0xb7280534&gt;] 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 &lt;module&gt; 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 </code></pre> <p>I'm just getting started on python non-blocking API, what is the idiomatic way to do something like this?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload