Add s.connect_ex() which returns errno instead of raising an exception.
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 77cf5d1..a225047 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -66,6 +66,7 @@
 - s.bind(sockaddr) --> None
 - s.close() --> None
 - s.connect(sockaddr) --> None
+- s.connect_ex(sockaddr) --> 0 or errno (handy for e.g. async connect)
 - s.fileno() --> file descriptor
 - s.dup() --> same as socket.fromfd(os.dup(s.fileno(), ...)
 - s.getpeername() --> sockaddr
@@ -681,6 +682,25 @@
 }
 
 
+/* s.connect_ex(sockaddr) method */
+
+static PyObject *
+BUILD_FUNC_DEF_2(PySocketSock_connect_ex,PySocketSockObject *,s, PyObject *,args)
+{
+	struct sockaddr *addr;
+	int addrlen;
+	int res;
+	if (!getsockaddrarg(s, args, &addr, &addrlen))
+		return NULL;
+	Py_BEGIN_ALLOW_THREADS
+	res = connect(s->sock_fd, addr, addrlen);
+	Py_END_ALLOW_THREADS
+	if (res != 0)
+		res = errno;
+	return PyInt_FromLong((long) res);
+}
+
+
 /* s.fileno() method */
 
 static PyObject *