Python socket.accept nonblocking?
Question: Is there a way I can use python's socket.accept() in a non-blocking way that
simply runs it and lets me just check if it got any new connections? I
_really_ don't want to use threading. Thanks.


Answer: You probably want something like `select.select()` (see
[documentation](http://docs.python.org/library/select.html#select.select)).
You supply `select()` with three lists of sockets: sockets you want to monitor
for readability, writability, and error states. The server socket will be
readable when a new client is waiting.

The `select()` function will block until one of the socket states has changed.
You can specify an optional fourth parameter, `timeout`, if you don't want to
block forever.

Here is a dumb echo server example:

    
    
    import select
    import socket
    
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind(('', 8888))
    server_socket.listen(5)
    print "Listening on port 8888"
    
    read_list = [server_socket]
    while True:
        readable, writable, errored = select.select(read_list, [], [])
        for s in readable:
            if s is server_socket:
                client_socket, address = server_socket.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)
    

Python also has `epoll`, `poll`, and `kqueue` implementations for platforms
that support them. They are more efficient versions of `select`.

