--- 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)