# HG changeset patch # User Tero Marttila # Date 1253991126 -10800 # Node ID e7c136812b0d87734b9c28eb374eebd3e14d6653 # Parent b2d40796897388a8ce0e95a0cd6156328bb52f34 flesh out nc.py on_connect diff -r b2d407968973 -r e7c136812b0d examples/nc.py --- a/examples/nc.py Sat Sep 26 21:51:46 2009 +0300 +++ b/examples/nc.py Sat Sep 26 21:52:06 2009 +0300 @@ -79,7 +79,7 @@ """ for ai in address.getaddrinfo(host, port, family, socktype) : - log_info("sock_connect: ai=%s", ai) + log_info("sock_connect: ai: %s", ai) # build socket try : @@ -113,12 +113,35 @@ # yay yield sock -def on_connect (fd, events, sock) : +def on_connect (ev, events, sock, sock_iter) : """ Outbound connect EV_WRITE callback, i.e. connection failed or was established """ - log_info("on_connect: %x", events) + log_debug("on_connect: ev=%r, events=%#x", ev, events) + + # test for timeout + if events & EV_TIMEOUT : + log_warn("on_connect: connect failed, timeout") + + # keep trying + return client_connect_next(sock_iter) + + + # test for errno + err = sock.getsockopt_int(SOL_SOCKET, SO_ERROR) + + if err : + # fail + log_warn("on_connect: connect failed, errno=%d", err) + + # keep trying + return client_connect_next(sock_iter) + + + # ok, connected + log_info("on_connect: connected") + def client_connect_next (sock_iter) : """ @@ -128,7 +151,7 @@ for sock in sock_iter : # pend for writing log_debug("client_connect_next: cb_event(%d, EV_WRITE, on_connect, %r)", sock.fd, sock) - ev = cb_event(ev_base, sock.fd, EV_WRITE, on_connect, sock) + ev = cb_event(ev_base, sock.fd, EV_WRITE, on_connect, sock, sock_iter) # wait specified timeout log_debug("client_connect_next: %r: add(%s)", ev, options.timeout)