def start_echo_server():
    global server_addr
    poll = io_poll.get_poll()
    print str(poll)
    server = CoroSocketEngine(poll, is_blocking=False)
    server.set_logger(getLogger("server"))

    def _on_readable(conn):
        buf, eof = conn.read_avail(4096)
        if buf:
            #print "write", len(buf)
            yield conn.write(buf)
        if eof:
            conn.close()
        else:
            conn.watch()
        return
    server.listen_addr(server_addr, readable_cb=_on_readable)

    def _run(_server):
        while True:
            try:
                _server.poll()
            except Exception, e:
                traceback.print_exc()
                os._exit(1)
        return