examples/nc.py
changeset 54 e7c136812b0d
parent 48 ee7ade660c0b
child 55 99c4344a35ce
--- 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)