]> granicus.if.org Git - python/commitdiff
Add s.connect_ex() which returns errno instead of raising an exception.
authorGuido van Rossum <guido@python.org>
Wed, 19 Nov 1997 18:57:13 +0000 (18:57 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 19 Nov 1997 18:57:13 +0000 (18:57 +0000)
Modules/socketmodule.c

index 77cf5d1862e9b4f418b9e3733f767d7a6e8f2e83..a2250478d87d88a8d35df5df80aa343eb60ad837 100644 (file)
@@ -66,6 +66,7 @@ Socket methods:
 - 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 @@ BUILD_FUNC_DEF_2(PySocketSock_connect,PySocketSockObject *,s, PyObject *,args)
 }
 
 
+/* 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 *