def accept_ssl(sock, application, cert, verify=None, timeout=None): with closing(sock): while True: client, addr = greennet.accept(sock) try: client = greennet.ssl.accept(client, cert, verify, timeout) except greennet.Timeout: client.close() continue greennet.schedule(greenlet(handle_connection), client, application, True)
def serve(application, addr=('', 8000)): trigger = Trigger() import signal handler = signal_handler(trigger) signal.signal(signal.SIGINT, handler) sock = listen(addr) greennet.schedule(greenlet(stop), trigger, sock) greennet.switch() try: accept_connections(sock, application) except (socket.error, select.error), err: if err.args[0] != errno.EBADF: raise
from py.magic import greenlet import greennet from greennet.queue import Queue def popper(queue): print queue.pop() if __name__ == '__main__': queue = Queue() greennet.schedule(greenlet(popper), queue) queue.append('hello world') greennet.run()
def accept_connections(sock, application): with closing(sock): while True: client, addr = greennet.accept(sock) greennet.schedule(greenlet(handle_connection), client, application)
from __future__ import with_statement from contextlib import closing import socket from py.magic import greenlet import greennet def echo(sock): with closing(sock): bufsize = sock.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF) while True: data = greennet.recv(sock, bufsize) if not data: break greennet.sendall(sock, data) if __name__ == '__main__': sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('', 1234)) sock.listen(socket.SOMAXCONN) with closing(sock): while True: client, addr = greennet.accept(sock) greennet.schedule(greenlet(echo), client)