Major cleanup.  Renamed static methods to avoid Py prefix.  Other misc
cleanup as well, e.g. renamed NTinit to os_init.
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index a440f21..65187c5 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1,14 +1,16 @@
 /* Socket module */
 
 /*
+
 This module provides an interface to Berkeley socket IPC.
 
 Limitations:
 
-- only AF_INET, AF_INET6 and AF_UNIX address families are supported in a
+- Only AF_INET, AF_INET6 and AF_UNIX address families are supported in a
   portable manner, though AF_PACKET is supported under Linux.
-- no read/write operations (use sendall/recv or makefile instead)
-- additional restrictions apply on Windows (compensated for by socket.py)
+- No read/write operations (use sendall/recv or makefile instead).
+- Additional restrictions apply on some non-Unix platforms (compensated
+  for by socket.py).
 
 Module interface:
 
@@ -46,34 +48,53 @@
   networking code, but accepted since they are returned by the
   getsockname() method.
 
-Socket methods:
+Local naming conventions:
 
-- s.accept() --> new socket object, sockaddr
-- 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
-- s.getsockname() --> sockaddr
-- s.getsockopt(level, optname[, buflen]) --> int or string
-- s.listen(backlog) --> None
-- s.makefile([mode[, bufsize]]) --> file object
-- s.recv(buflen [,flags]) --> string
-- s.recvfrom(buflen [,flags]) --> string, sockaddr
-- s.send(string [,flags]) --> nbytes
-- s.sendall(string [,flags]) # tries to send everything in a loop
-- s.sendto(string, [flags,] sockaddr) --> nbytes
-- s.setblocking(0 | 1) --> None
-- s.settimeout(None | float) -> None # Argument in seconds
-- s.gettimeout() -> None or float seconds
-- s.setsockopt(level, optname, value) --> None
-- s.shutdown(how) --> None
-- repr(s) --> "<socket object, fd=%d, family=%d, type=%d, protocol=%d>"
+- names starting with sock_ are socket object methods
+- names starting with socket_ are module-level functions
+- names starting with PySocket are exported through socketmodule.h
 
 */
 
+/* Socket object documentation */
+static char sock_doc[] =
+"socket([family[, type[, proto]]]) -> socket object\n\
+\n\
+Open a socket of the given type.  The family argument specifies the\n\
+address family; it defaults to AF_INET.  The type argument specifies\n\
+whether this is a stream (SOCK_STREAM, this is the default)\n\
+or datagram (SOCK_DGRAM) socket.  The protocol argument defaults to 0,\n\
+specifying the default protocol.  Keyword arguments are accepted.\n\
+\n\
+A socket object represents one endpoint of a network connection.\n\
+\n\
+Methods of socket objects (keyword arguments not allowed):\n\
+\n\
+accept() -- accept a connection, returning new socket and client address\n\
+bind(addr) -- bind the socket to a local address\n\
+close() -- close the socket\n\
+connect(addr) -- connect the socket to a remote address\n\
+connect_ex(addr) -- connect, return an error code instead of an exception\n\
+dup() -- return a new socket object identical to the current one [*]\n\
+fileno() -- return underlying file descriptor\n\
+getpeername() -- return remote address [*]\n\
+getsockname() -- return local address\n\
+getsockopt(level, optname[, buflen]) -- get socket options\n\
+gettimeout() -- return timeout or None\n\
+listen(n) -- start listening for incoming connections\n\
+makefile([mode, [bufsize]]) -- return a file object for the socket [*]\n\
+recv(buflen[, flags]) -- receive data\n\
+recvfrom(buflen[, flags]) -- receive data and sender's address\n\
+sendall(data[, flags]) -- send all data\n\
+send(data[, flags]) -- send data, may not send all of it\n\
+sendto(data[, flags], addr) -- send data to a given address\n\
+setblocking(0 | 1) -- set or clear the blocking I/O flag\n\
+setsockopt(level, optname, value) -- set socket options\n\
+settimeout(None | float) -- set or clear the timeout\n\
+shutdown(how) -- shut down traffic in one or both directions\n\
+\n\
+ [*] not available on all platforms!";
+
 #include "Python.h"
 
 /* XXX This is a terrible mess of of platform-dependent preprocessor hacks.
@@ -237,10 +258,9 @@
 
 /* Global variable holding the exception type for errors detected
    by this module (but not argument type or memory errors, etc.). */
-
-static PyObject *PySocket_Error;
-static PyObject *PyH_Error;
-static PyObject *PyGAI_Error;
+static PyObject *socket_error;
+static PyObject *socket_herror;
+static PyObject *socket_gaierror;
 
 #ifdef RISCOS
 /* Global variable which is !=0 if Python is running in a RISC OS taskwindow */
@@ -248,16 +268,16 @@
 #endif
 
 /* A forward reference to the socket type object.
-   The PySocketSock_Type variable contains pointers to various functions,
-   some of which call PySocketSock_New(), which uses PySocketSock_Type, so
+   The sock_type variable contains pointers to various functions,
+   some of which call new_sockobject(), which uses sock_type, so
    there has to be a circular reference. */
-staticforward PyTypeObject PySocketSock_Type;
+staticforward PyTypeObject sock_type;
 
 /* Convenience function to raise an error according to errno
    and return a NULL pointer from a function. */
 
 static PyObject *
-PySocket_Err(void)
+set_error(void)
 {
 #ifdef MS_WINDOWS
 	int err_no = WSAGetLastError();
@@ -336,7 +356,7 @@
 
 		v = Py_BuildValue("(is)", err_no, msg);
 		if (v != NULL) {
-			PyErr_SetObject(PySocket_Error, v);
+			PyErr_SetObject(socket_error, v);
 			Py_DECREF(v);
 		}
 		return NULL;
@@ -371,7 +391,7 @@
 			}
 			v = Py_BuildValue("(is)", myerrorcode, outbuf);
 			if (v != NULL) {
-				PyErr_SetObject(PySocket_Error, v);
+				PyErr_SetObject(socket_error, v);
 				Py_DECREF(v);
 			}
 			return NULL;
@@ -379,12 +399,12 @@
 	}
 #endif
 
-	return PyErr_SetFromErrno(PySocket_Error);
+	return PyErr_SetFromErrno(socket_error);
 }
 
 
 static PyObject *
-PyH_Err(int h_error)
+set_herror(int h_error)
 {
 	PyObject *v;
 
@@ -394,7 +414,7 @@
 	v = Py_BuildValue("(is)", h_error, "host not found");
 #endif
 	if (v != NULL) {
-		PyErr_SetObject(PyH_Error, v);
+		PyErr_SetObject(socket_herror, v);
 		Py_DECREF(v);
 	}
 
@@ -403,14 +423,14 @@
 
 
 static PyObject *
-PyGAI_Err(int error)
+set_gaierror(int error)
 {
 	PyObject *v;
 
 #ifdef EAI_SYSTEM
 	/* EAI_SYSTEM is not available on Windows XP. */
 	if (error == EAI_SYSTEM)
-		return PySocket_Err();
+		return set_error();
 #endif
 
 #ifdef HAVE_GAI_STRERROR
@@ -419,7 +439,7 @@
 	v = Py_BuildValue("(is)", error, "getaddrinfo failed");
 #endif
 	if (v != NULL) {
-		PyErr_SetObject(PyGAI_Error, v);
+		PyErr_SetObject(socket_gaierror, v);
 		Py_DECREF(v);
 	}
 
@@ -439,7 +459,7 @@
 #endif
 
 	if (v != NULL) {
-		PyErr_SetObject(PySocket_Error, v);
+		PyErr_SetObject(socket_error, v);
 		Py_DECREF(v);
 	}
 
@@ -541,7 +561,7 @@
 	s->sock_blocking = 1; /* Start in blocking mode */
 	s->sock_timeout = -1.0; /* Start without timeout */
 
-	s->errorhandler = &PySocket_Err;
+	s->errorhandler = &set_error;
 #ifdef RISCOS
 	if (taskwindow)
 		socketioctl(s->sock_fd, 0x80046679, (u_long*)&block);
@@ -555,11 +575,11 @@
    in NEWOBJ()). */
 
 static PySocketSockObject *
-PySocketSock_New(SOCKET_T fd, int family, int type, int proto)
+new_sockobject(SOCKET_T fd, int family, int type, int proto)
 {
 	PySocketSockObject *s;
 	s = (PySocketSockObject *)
-		PyType_GenericNew(&PySocketSock_Type, NULL, NULL);
+		PyType_GenericNew(&sock_type, NULL, NULL);
 	if (s != NULL)
 		init_sockobject(s, fd, family, type, proto);
 	return s;
@@ -594,7 +614,7 @@
 		hints.ai_flags = AI_PASSIVE;
 		error = getaddrinfo(NULL, "0", &hints, &res);
 		if (error) {
-			PyGAI_Err(error);
+			set_gaierror(error);
 			return -1;
 		}
 		switch (res->ai_family) {
@@ -608,13 +628,13 @@
 #endif
 		default:
 			freeaddrinfo(res);
-			PyErr_SetString(PySocket_Error,
+			PyErr_SetString(socket_error,
 				"unsupported address family");
 			return -1;
 		}
 		if (res->ai_next) {
 			freeaddrinfo(res);
-			PyErr_SetString(PySocket_Error,
+			PyErr_SetString(socket_error,
 				"wildcard resolved to multiple address");
 			return -1;
 		}
@@ -625,7 +645,7 @@
 	if (name[0] == '<' && strcmp(name, "<broadcast>") == 0) {
 		struct sockaddr_in *sin;
 		if (af != PF_INET && af != PF_UNSPEC) {
-			PyErr_SetString(PySocket_Error,
+			PyErr_SetString(socket_error,
 				"address family mismatched");
 			return -1;
 		}
@@ -650,7 +670,7 @@
 	}
 #endif
 	if (error) {
-		PyGAI_Err(error);
+		set_gaierror(error);
 		return -1;
 	}
 	memcpy((char *) addr_ret, res->ai_addr, res->ai_addrlen);
@@ -663,7 +683,7 @@
 		return 16;
 #endif
 	default:
-		PyErr_SetString(PySocket_Error, "unknown address family");
+		PyErr_SetString(socket_error, "unknown address family");
 		return -1;
 	}
 }
@@ -682,7 +702,7 @@
 	error = getnameinfo(addr, addrlen, buf, sizeof(buf), NULL, 0,
 		NI_NUMERICHOST);
 	if (error) {
-		PyGAI_Err(error);
+		set_gaierror(error);
 		return NULL;
 	}
 	return PyString_FromString(buf);
@@ -808,7 +828,7 @@
 		if (!PyArg_Parse(args, "t#", &path, &len))
 			return 0;
 		if (len > sizeof addr->sun_path) {
-			PyErr_SetString(PySocket_Error,
+			PyErr_SetString(socket_error,
 					"AF_UNIX path too long");
 			return 0;
 		}
@@ -905,7 +925,7 @@
 	/* More cases here... */
 
 	default:
-		PyErr_SetString(PySocket_Error, "getsockaddrarg: bad family");
+		PyErr_SetString(socket_error, "getsockaddrarg: bad family");
 		return 0;
 
 	}
@@ -954,7 +974,7 @@
 	/* More cases here... */
 
 	default:
-		PyErr_SetString(PySocket_Error, "getsockaddrlen: bad family");
+		PyErr_SetString(socket_error, "getsockaddrlen: bad family");
 		return 0;
 
 	}
@@ -964,7 +984,7 @@
 /* s.accept() method */
 
 static PyObject *
-PySocketSock_accept(PySocketSockObject *s)
+sock_accept(PySocketSockObject *s)
 {
 	char addrbuf[256];
 	SOCKET_T newfd;
@@ -1025,10 +1045,10 @@
 
 	/* Create the new object with unspecified family,
 	   to avoid calls to bind() etc. on it. */
-	sock = (PyObject *) PySocketSock_New(newfd,
-					s->sock_family,
-					s->sock_type,
-					s->sock_proto);
+	sock = (PyObject *) new_sockobject(newfd,
+					   s->sock_family,
+					   s->sock_type,
+					   s->sock_proto);
 
 	if (sock == NULL) {
 		SOCKETCLOSE(newfd);
@@ -1057,7 +1077,7 @@
 /* s.setblocking(1 | 0) method */
 
 static PyObject *
-PySocketSock_setblocking(PySocketSockObject *s, PyObject *arg)
+sock_setblocking(PySocketSockObject *s, PyObject *arg)
 {
 	int block;
 
@@ -1086,7 +1106,7 @@
    Causes an exception to be raised when the given time has
    elapsed when performing a blocking socket operation. */
 static PyObject *
-PySocketSock_settimeout(PySocketSockObject *s, PyObject *arg)
+sock_settimeout(PySocketSockObject *s, PyObject *arg)
 {
 	double value;
 
@@ -1132,7 +1152,7 @@
 /* s.gettimeout() method.
    Returns the timeout associated with a socket. */
 static PyObject *
-PySocketSock_gettimeout(PySocketSockObject *s)
+sock_gettimeout(PySocketSockObject *s)
 {
 	if (s->sock_timeout < 0.0) {
 		Py_INCREF(Py_None);
@@ -1153,7 +1173,7 @@
 /* s.sleeptaskw(1 | 0) method */
 
 static PyObject *
-PySocketSock_sleeptaskw(PySocketSockObject *s,PyObject *args)
+sock_sleeptaskw(PySocketSockObject *s,PyObject *args)
 {
 	int block;
 	int delay_flag;
@@ -1179,7 +1199,7 @@
    use optional built-in module 'struct' to encode the string. */
 
 static PyObject *
-PySocketSock_setsockopt(PySocketSockObject *s, PyObject *args)
+sock_setsockopt(PySocketSockObject *s, PyObject *args)
 {
 	int level;
 	int optname;
@@ -1219,7 +1239,7 @@
    use optional built-in module 'struct' to decode the string. */
 
 static PyObject *
-PySocketSock_getsockopt(PySocketSockObject *s, PyObject *args)
+sock_getsockopt(PySocketSockObject *s, PyObject *args)
 {
 	int level;
 	int optname;
@@ -1229,7 +1249,7 @@
 
 #ifdef __BEOS__
 	/* We have incomplete socket support. */
-	PyErr_SetString(PySocket_Error, "getsockopt not supported");
+	PyErr_SetString(socket_error, "getsockopt not supported");
 	return NULL;
 #else
 
@@ -1247,7 +1267,7 @@
 		return PyInt_FromLong(flag);
 	}
 	if (buflen <= 0 || buflen > 1024) {
-		PyErr_SetString(PySocket_Error,
+		PyErr_SetString(socket_error,
 				"getsockopt buflen out of range");
 		return NULL;
 	}
@@ -1276,7 +1296,7 @@
 /* s.bind(sockaddr) method */
 
 static PyObject *
-PySocketSock_bind(PySocketSockObject *s, PyObject *addro)
+sock_bind(PySocketSockObject *s, PyObject *addro)
 {
 	struct sockaddr *addr;
 	int addrlen;
@@ -1306,7 +1326,7 @@
    will surely fail. */
 
 static PyObject *
-PySocketSock_close(PySocketSockObject *s)
+sock_close(PySocketSockObject *s)
 {
 	SOCKET_T fd;
 
@@ -1329,7 +1349,7 @@
 /* s.connect(sockaddr) method */
 
 static PyObject *
-PySocketSock_connect(PySocketSockObject *s, PyObject *addro)
+sock_connect(PySocketSockObject *s, PyObject *addro)
 {
 	struct sockaddr *addr;
 	int addrlen;
@@ -1396,7 +1416,7 @@
 /* s.connect_ex(sockaddr) method */
 
 static PyObject *
-PySocketSock_connect_ex(PySocketSockObject *s, PyObject *addro)
+sock_connect_ex(PySocketSockObject *s, PyObject *addro)
 {
 	struct sockaddr *addr;
 	int addrlen;
@@ -1467,7 +1487,7 @@
 /* s.fileno() method */
 
 static PyObject *
-PySocketSock_fileno(PySocketSockObject *s)
+sock_fileno(PySocketSockObject *s)
 {
 #if SIZEOF_SOCKET_T <= SIZEOF_LONG
 	return PyInt_FromLong((long) s->sock_fd);
@@ -1486,7 +1506,7 @@
 /* s.dup() method */
 
 static PyObject *
-PySocketSock_dup(PySocketSockObject *s)
+sock_dup(PySocketSockObject *s)
 {
 	SOCKET_T newfd;
 	PyObject *sock;
@@ -1494,10 +1514,10 @@
 	newfd = dup(s->sock_fd);
 	if (newfd < 0)
 		return s->errorhandler();
-	sock = (PyObject *) PySocketSock_New(newfd,
-					     s->sock_family,
-					     s->sock_type,
-					     s->sock_proto);
+	sock = (PyObject *) new_sockobject(newfd,
+					   s->sock_family,
+					   s->sock_type,
+					   s->sock_proto);
 	if (sock == NULL)
 		SOCKETCLOSE(newfd);
 	return sock;
@@ -1514,7 +1534,7 @@
 /* s.getsockname() method */
 
 static PyObject *
-PySocketSock_getsockname(PySocketSockObject *s)
+sock_getsockname(PySocketSockObject *s)
 {
 	char addrbuf[256];
 	int res;
@@ -1542,7 +1562,7 @@
 /* s.getpeername() method */
 
 static PyObject *
-PySocketSock_getpeername(PySocketSockObject *s)
+sock_getpeername(PySocketSockObject *s)
 {
 	char addrbuf[256];
 	int res;
@@ -1571,7 +1591,7 @@
 /* s.listen(n) method */
 
 static PyObject *
-PySocketSock_listen(PySocketSockObject *s, PyObject *arg)
+sock_listen(PySocketSockObject *s, PyObject *arg)
 {
 	int backlog;
 	int res;
@@ -1607,7 +1627,7 @@
    The mode argument specifies 'r' or 'w' passed to fdopen(). */
 
 static PyObject *
-PySocketSock_makefile(PySocketSockObject *s, PyObject *args)
+sock_makefile(PySocketSockObject *s, PyObject *args)
 {
 	extern int fclose(FILE *);
 	char *mode = "r";
@@ -1656,7 +1676,7 @@
 /* s.recv(nbytes [,flags]) method */
 
 static PyObject *
-PySocketSock_recv(PySocketSockObject *s, PyObject *args)
+sock_recv(PySocketSockObject *s, PyObject *args)
 {
 	int len, n, flags = 0;
 	PyObject *buf;
@@ -1706,7 +1726,7 @@
 /* s.recvfrom(nbytes [,flags]) method */
 
 static PyObject *
-PySocketSock_recvfrom(PySocketSockObject *s, PyObject *args)
+sock_recvfrom(PySocketSockObject *s, PyObject *args)
 {
 	char addrbuf[256];
 	PyObject *buf = NULL;
@@ -1774,7 +1794,7 @@
 /* s.send(data [,flags]) method */
 
 static PyObject *
-PySocketSock_send(PySocketSockObject *s, PyObject *args)
+sock_send(PySocketSockObject *s, PyObject *args)
 {
 	char *buf;
 	int len, n, flags = 0;
@@ -1809,7 +1829,7 @@
 /* s.sendall(data [,flags]) method */
 
 static PyObject *
-PySocketSock_sendall(PySocketSockObject *s, PyObject *args)
+sock_sendall(PySocketSockObject *s, PyObject *args)
 {
 	char *buf;
 	int len, n, flags = 0;
@@ -1853,7 +1873,7 @@
 /* s.sendto(data, [flags,] sockaddr) method */
 
 static PyObject *
-PySocketSock_sendto(PySocketSockObject *s, PyObject *args)
+sock_sendto(PySocketSockObject *s, PyObject *args)
 {
 	PyObject *addro;
 	char *buf;
@@ -1897,7 +1917,7 @@
 /* s.shutdown(how) method */
 
 static PyObject *
-PySocketSock_shutdown(PySocketSockObject *s, PyObject *arg)
+sock_shutdown(PySocketSockObject *s, PyObject *arg)
 {
 	int how;
 	int res;
@@ -1923,59 +1943,59 @@
 
 /* List of methods for socket objects */
 
-static PyMethodDef PySocketSock_methods[] = {
-	{"accept",	(PyCFunction)PySocketSock_accept, METH_NOARGS,
+static PyMethodDef sock_methods[] = {
+	{"accept",	(PyCFunction)sock_accept, METH_NOARGS,
 			accept_doc},
-	{"bind",	(PyCFunction)PySocketSock_bind, METH_O,
+	{"bind",	(PyCFunction)sock_bind, METH_O,
 			bind_doc},
-	{"close",	(PyCFunction)PySocketSock_close, METH_NOARGS,
+	{"close",	(PyCFunction)sock_close, METH_NOARGS,
 			close_doc},
-	{"connect",	(PyCFunction)PySocketSock_connect, METH_O,
+	{"connect",	(PyCFunction)sock_connect, METH_O,
 			connect_doc},
-	{"connect_ex",	(PyCFunction)PySocketSock_connect_ex, METH_O,
+	{"connect_ex",	(PyCFunction)sock_connect_ex, METH_O,
 			connect_ex_doc},
 #ifndef NO_DUP
-	{"dup",		(PyCFunction)PySocketSock_dup, METH_NOARGS,
+	{"dup",		(PyCFunction)sock_dup, METH_NOARGS,
 			dup_doc},
 #endif
-	{"fileno",	(PyCFunction)PySocketSock_fileno, METH_NOARGS,
+	{"fileno",	(PyCFunction)sock_fileno, METH_NOARGS,
 			fileno_doc},
 #ifdef HAVE_GETPEERNAME
-	{"getpeername",	(PyCFunction)PySocketSock_getpeername,
+	{"getpeername",	(PyCFunction)sock_getpeername,
 			METH_NOARGS, getpeername_doc},
 #endif
-	{"getsockname",	(PyCFunction)PySocketSock_getsockname,
+	{"getsockname",	(PyCFunction)sock_getsockname,
 			METH_NOARGS, getsockname_doc},
-	{"getsockopt",	(PyCFunction)PySocketSock_getsockopt, METH_VARARGS,
+	{"getsockopt",	(PyCFunction)sock_getsockopt, METH_VARARGS,
 			getsockopt_doc},
-	{"listen",	(PyCFunction)PySocketSock_listen, METH_O,
+	{"listen",	(PyCFunction)sock_listen, METH_O,
 			listen_doc},
 #ifndef NO_DUP
-	{"makefile",	(PyCFunction)PySocketSock_makefile, METH_VARARGS,
+	{"makefile",	(PyCFunction)sock_makefile, METH_VARARGS,
 			makefile_doc},
 #endif
-	{"recv",	(PyCFunction)PySocketSock_recv, METH_VARARGS,
+	{"recv",	(PyCFunction)sock_recv, METH_VARARGS,
 			recv_doc},
-	{"recvfrom",	(PyCFunction)PySocketSock_recvfrom, METH_VARARGS,
+	{"recvfrom",	(PyCFunction)sock_recvfrom, METH_VARARGS,
 			recvfrom_doc},
-	{"send",	(PyCFunction)PySocketSock_send, METH_VARARGS,
+	{"send",	(PyCFunction)sock_send, METH_VARARGS,
 			send_doc},
-	{"sendall",	(PyCFunction)PySocketSock_sendall, METH_VARARGS,
+	{"sendall",	(PyCFunction)sock_sendall, METH_VARARGS,
 			sendall_doc},
-	{"sendto",	(PyCFunction)PySocketSock_sendto, METH_VARARGS,
+	{"sendto",	(PyCFunction)sock_sendto, METH_VARARGS,
 			sendto_doc},
-	{"setblocking",	(PyCFunction)PySocketSock_setblocking, METH_O,
+	{"setblocking",	(PyCFunction)sock_setblocking, METH_O,
 			setblocking_doc},
-	{"settimeout", (PyCFunction)PySocketSock_settimeout, METH_O,
+	{"settimeout", (PyCFunction)sock_settimeout, METH_O,
 			settimeout_doc},
-	{"gettimeout", (PyCFunction)PySocketSock_gettimeout, METH_NOARGS,
+	{"gettimeout", (PyCFunction)sock_gettimeout, METH_NOARGS,
 			gettimeout_doc},
-	{"setsockopt",	(PyCFunction)PySocketSock_setsockopt, METH_VARARGS,
+	{"setsockopt",	(PyCFunction)sock_setsockopt, METH_VARARGS,
 			setsockopt_doc},
-	{"shutdown",	(PyCFunction)PySocketSock_shutdown, METH_O,
+	{"shutdown",	(PyCFunction)sock_shutdown, METH_O,
 			shutdown_doc},
 #ifdef RISCOS
-	{"sleeptaskw",	(PyCFunction)PySocketSock_sleeptaskw, METH_VARARGS,
+	{"sleeptaskw",	(PyCFunction)sock_sleeptaskw, METH_VARARGS,
 	 		sleeptaskw_doc},
 #endif
 	{NULL,			NULL}		/* sentinel */
@@ -1986,7 +2006,7 @@
    First close the file description. */
 
 static void
-PySocketSock_dealloc(PySocketSockObject *s)
+sock_dealloc(PySocketSockObject *s)
 {
 	if (s->sock_fd != -1)
 		(void) SOCKETCLOSE(s->sock_fd);
@@ -1995,7 +2015,7 @@
 
 
 static PyObject *
-PySocketSock_repr(PySocketSockObject *s)
+sock_repr(PySocketSockObject *s)
 {
 	char buf[512];
 #if SIZEOF_SOCKET_T > SIZEOF_LONG
@@ -2022,7 +2042,7 @@
 /* Create a new, uninitialized socket object. */
 
 static PyObject *
-PySocketSock_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+sock_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
 	PyObject *new;
 
@@ -2030,7 +2050,7 @@
 	if (new != NULL) {
 		((PySocketSockObject *)new)->sock_fd = -1;
 		((PySocketSockObject *)new)->sock_timeout = -1.0;
-		((PySocketSockObject *)new)->errorhandler = &PySocket_Err;
+		((PySocketSockObject *)new)->errorhandler = &set_error;
 	}
 	return new;
 }
@@ -2040,7 +2060,7 @@
 
 /*ARGSUSED*/
 static int
-PySocketSock_init(PyObject *self, PyObject *args, PyObject *kwds)
+sock_init(PyObject *self, PyObject *args, PyObject *kwds)
 {
 	PySocketSockObject *s = (PySocketSockObject *)self;
 	SOCKET_T fd;
@@ -2062,7 +2082,7 @@
 	if (fd < 0)
 #endif
 	{
-		PySocket_Err();
+		set_error();
 		return -1;
 	}
 	init_sockobject(s, fd, family, type, proto);
@@ -2079,55 +2099,18 @@
 
 /* Type object for socket objects. */
 
-static char socket_doc[] =
-"socket([family[, type[, proto]]]) -> socket object\n\
-\n\
-Open a socket of the given type.  The family argument specifies the\n\
-address family; it defaults to AF_INET.  The type argument specifies\n\
-whether this is a stream (SOCK_STREAM, this is the default)\n\
-or datagram (SOCK_DGRAM) socket.  The protocol argument defaults to 0,\n\
-specifying the default protocol.\n\
-\n\
-A socket represents one endpoint of a network connection.\n\
-\n\
-Methods:\n\
-\n\
-accept() -- accept a connection, returning new socket and client address\n\
-bind() -- bind the socket to a local address\n\
-close() -- close the socket\n\
-connect() -- connect the socket to a remote address\n\
-connect_ex() -- connect, return an error code instead of an exception \n\
-dup() -- return a new socket object identical to the current one (*)\n\
-fileno() -- return underlying file descriptor\n\
-getpeername() -- return remote address (*)\n\
-getsockname() -- return local address\n\
-getsockopt() -- get socket options\n\
-listen() -- start listening for incoming connections\n\
-makefile() -- return a file object corresponding to the socket (*)\n\
-recv() -- receive data\n\
-recvfrom() -- receive data and sender's address\n\
-send() -- send data, may not send all of it\n\
-sendall() -- send all data\n\
-sendto() -- send data to a given address\n\
-setblocking() -- set or clear the blocking I/O flag\n\
-settimeout() -- set or clear the timeout\n\
-setsockopt() -- set socket options\n\
-shutdown() -- shut down traffic in one or both directions\n\
-\n\
-(*) not available on all platforms!)";
-
-static PyTypeObject PySocketSock_Type = {
+static PyTypeObject sock_type = {
 	PyObject_HEAD_INIT(0)	/* Must fill in type value later */
 	0,					/* ob_size */
 	"_socket.socket",			/* tp_name */
 	sizeof(PySocketSockObject),		/* tp_basicsize */
 	0,					/* tp_itemsize */
-	(destructor)PySocketSock_dealloc,	/* tp_dealloc */
+	(destructor)sock_dealloc,		/* tp_dealloc */
 	0,					/* tp_print */
 	0,					/* tp_getattr */
 	0,					/* tp_setattr */
 	0,					/* tp_compare */
-	(reprfunc)PySocketSock_repr,		/* tp_repr */
+	(reprfunc)sock_repr,			/* tp_repr */
 	0,					/* tp_as_number */
 	0,					/* tp_as_sequence */
 	0,					/* tp_as_mapping */
@@ -2138,14 +2121,14 @@
 	0,					/* tp_setattro */
 	0,					/* tp_as_buffer */
 	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
-	socket_doc,				/* tp_doc */
+	sock_doc,				/* tp_doc */
 	0,					/* tp_traverse */
 	0,					/* tp_clear */
 	0,					/* tp_richcompare */
 	0,					/* tp_weaklistoffset */
 	0,					/* tp_iter */
 	0,					/* tp_iternext */
-	PySocketSock_methods,			/* tp_methods */
+	sock_methods,				/* tp_methods */
 	0,					/* tp_members */
 	0,					/* tp_getset */
 	0,					/* tp_base */
@@ -2153,9 +2136,9 @@
 	0,					/* tp_descr_get */
 	0,					/* tp_descr_set */
 	0,					/* tp_dictoffset */
-	PySocketSock_init,			/* tp_init */
+	sock_init,				/* tp_init */
 	0,	/* set below */			/* tp_alloc */
-	PySocketSock_new,			/* tp_new */
+	sock_new,				/* tp_new */
 	0,	/* set below */			/* tp_free */
 };
 
@@ -2164,7 +2147,7 @@
 
 /*ARGSUSED*/
 static PyObject *
-PySocket_gethostname(PyObject *self, PyObject *args)
+socket_gethostname(PyObject *self, PyObject *args)
 {
 	char buf[1024];
 	int res;
@@ -2174,7 +2157,7 @@
 	res = gethostname(buf, (int) sizeof buf - 1);
 	Py_END_ALLOW_THREADS
 	if (res < 0)
-		return PySocket_Err();
+		return set_error();
 	buf[sizeof buf - 1] = '\0';
 	return PyString_FromString(buf);
 }
@@ -2189,7 +2172,7 @@
 
 /*ARGSUSED*/
 static PyObject *
-PySocket_gethostbyname(PyObject *self, PyObject *args)
+socket_gethostbyname(PyObject *self, PyObject *args)
 {
 	char *name;
 	struct sockaddr_storage addrbuf;
@@ -2222,9 +2205,9 @@
 	if (h == NULL) {
 		/* Let's get real error message to return */
 #ifndef RISCOS
-		PyH_Err(h_errno);
+		set_herror(h_errno);
 #else
-		PyErr_SetString(PySocket_Error, "host not found");
+		PyErr_SetString(socket_error, "host not found");
 #endif
 		return NULL;
 	}
@@ -2232,11 +2215,11 @@
 	if (h->h_addrtype != af) {
 #ifdef HAVE_STRERROR
 		/* Let's get real error message to return */
-		PyErr_SetString(PySocket_Error,
+		PyErr_SetString(socket_error,
 				(char *)strerror(EAFNOSUPPORT));
 #else
 		PyErr_SetString(
-			PySocket_Error,
+			socket_error,
 			"Address family not supported by protocol family");
 #endif
 		return NULL;
@@ -2318,7 +2301,7 @@
 #endif
 
 		default:	/* can't happen */
-			PyErr_SetString(PySocket_Error,
+			PyErr_SetString(socket_error,
 					"unsupported address family");
 			return NULL;
 		}
@@ -2346,7 +2329,7 @@
 
 /*ARGSUSED*/
 static PyObject *
-PySocket_gethostbyname_ex(PyObject *self, PyObject *args)
+socket_gethostbyname_ex(PyObject *self, PyObject *args)
 {
 	char *name;
 	struct hostent *h;
@@ -2414,7 +2397,7 @@
 
 /*ARGSUSED*/
 static PyObject *
-PySocket_gethostbyaddr(PyObject *self, PyObject *args)
+socket_gethostbyaddr(PyObject *self, PyObject *args)
 {
 #ifdef ENABLE_IPV6
 	struct sockaddr_storage addr;
@@ -2462,7 +2445,7 @@
 		break;
 #endif
 	default:
-		PyErr_SetString(PySocket_Error, "unsupported address family");
+		PyErr_SetString(socket_error, "unsupported address family");
 		return NULL;
 	}
 	Py_BEGIN_ALLOW_THREADS
@@ -2506,7 +2489,7 @@
 
 /*ARGSUSED*/
 static PyObject *
-PySocket_getservbyname(PyObject *self, PyObject *args)
+socket_getservbyname(PyObject *self, PyObject *args)
 {
 	char *name, *proto;
 	struct servent *sp;
@@ -2516,7 +2499,7 @@
 	sp = getservbyname(name, proto);
 	Py_END_ALLOW_THREADS
 	if (sp == NULL) {
-		PyErr_SetString(PySocket_Error, "service/proto not found");
+		PyErr_SetString(socket_error, "service/proto not found");
 		return NULL;
 	}
 	return PyInt_FromLong((long) ntohs(sp->s_port));
@@ -2535,13 +2518,13 @@
 
 /*ARGSUSED*/
 static PyObject *
-PySocket_getprotobyname(PyObject *self, PyObject *args)
+socket_getprotobyname(PyObject *self, PyObject *args)
 {
 	char *name;
 	struct protoent *sp;
 #ifdef __BEOS__
 /* Not available in BeOS yet. - [cjh] */
-	PyErr_SetString(PySocket_Error, "getprotobyname not supported");
+	PyErr_SetString(socket_error, "getprotobyname not supported");
 	return NULL;
 #else
 	if (!PyArg_ParseTuple(args, "s:getprotobyname", &name))
@@ -2550,7 +2533,7 @@
 	sp = getprotobyname(name);
 	Py_END_ALLOW_THREADS
 	if (sp == NULL) {
-		PyErr_SetString(PySocket_Error, "protocol not found");
+		PyErr_SetString(socket_error, "protocol not found");
 		return NULL;
 	}
 	return PyInt_FromLong((long) sp->p_proto);
@@ -2570,7 +2553,7 @@
 
 /*ARGSUSED*/
 static PyObject *
-PySocket_fromfd(PyObject *self, PyObject *args)
+socket_fromfd(PyObject *self, PyObject *args)
 {
 	PySocketSockObject *s;
 	SOCKET_T fd;
@@ -2581,8 +2564,8 @@
 	/* Dup the fd so it and the socket can be closed independently */
 	fd = dup(fd);
 	if (fd < 0)
-		return PySocket_Err();
-	s = PySocketSock_New(fd, family, type, proto);
+		return set_error();
+	s = new_sockobject(fd, family, type, proto);
 	/* From now on, ignore SIGPIPE and let the error checking
 	   do the work. */
 #ifdef SIGPIPE
@@ -2601,7 +2584,7 @@
 
 
 static PyObject *
-PySocket_ntohs(PyObject *self, PyObject *args)
+socket_ntohs(PyObject *self, PyObject *args)
 {
 	int x1, x2;
 
@@ -2619,7 +2602,7 @@
 
 
 static PyObject *
-PySocket_ntohl(PyObject *self, PyObject *args)
+socket_ntohl(PyObject *self, PyObject *args)
 {
 	int x1, x2;
 
@@ -2637,7 +2620,7 @@
 
 
 static PyObject *
-PySocket_htons(PyObject *self, PyObject *args)
+socket_htons(PyObject *self, PyObject *args)
 {
 	int x1, x2;
 
@@ -2655,7 +2638,7 @@
 
 
 static PyObject *
-PySocket_htonl(PyObject *self, PyObject *args)
+socket_htonl(PyObject *self, PyObject *args)
 {
 	int x1, x2;
 
@@ -2680,7 +2663,7 @@
 binary format used in low-level network functions.";
 
 static PyObject*
-PySocket_inet_aton(PyObject *self, PyObject *args)
+socket_inet_aton(PyObject *self, PyObject *args)
 {
 #ifndef INADDR_NONE
 #define INADDR_NONE (-1)
@@ -2696,7 +2679,7 @@
 	packed_addr = inet_addr(ip_addr);
 
 	if (packed_addr == INADDR_NONE) {	/* invalid address */
-		PyErr_SetString(PySocket_Error,
+		PyErr_SetString(socket_error,
 			"illegal IP address string passed to inet_aton");
 		return NULL;
 	}
@@ -2711,7 +2694,7 @@
 Convert an IP address from 32-bit packed binary format to string format";
 
 static PyObject*
-PySocket_inet_ntoa(PyObject *self, PyObject *args)
+socket_inet_ntoa(PyObject *self, PyObject *args)
 {
 	char *packed_str;
 	int addr_len;
@@ -2722,7 +2705,7 @@
 	}
 
 	if (addr_len != sizeof(packed_addr)) {
-		PyErr_SetString(PySocket_Error,
+		PyErr_SetString(socket_error,
 			"packed IP wrong length for inet_ntoa");
 		return NULL;
 	}
@@ -2736,7 +2719,7 @@
 
 /*ARGSUSED*/
 static PyObject *
-PySocket_getaddrinfo(PyObject *self, PyObject *args)
+socket_getaddrinfo(PyObject *self, PyObject *args)
 {
 	struct addrinfo hints, *res;
 	struct addrinfo *res0 = NULL;
@@ -2763,7 +2746,7 @@
 	} else if (pobj == Py_None) {
 		pptr = (char *)NULL;
 	} else {
-		PyErr_SetString(PySocket_Error, "Int or String expected");
+		PyErr_SetString(socket_error, "Int or String expected");
 		return NULL;
 	}
 	memset(&hints, 0, sizeof(hints));
@@ -2773,7 +2756,7 @@
 	hints.ai_flags = flags;
 	error = getaddrinfo(hptr, pptr, &hints, &res0);
 	if (error) {
-		PyGAI_Err(error);
+		set_gaierror(error);
 		return NULL;
 	}
 
@@ -2815,7 +2798,7 @@
 
 /*ARGSUSED*/
 static PyObject *
-PySocket_getnameinfo(PyObject *self, PyObject *args)
+socket_getnameinfo(PyObject *self, PyObject *args)
 {
 	PyObject *sa = (PyObject *)NULL;
 	int flags;
@@ -2838,11 +2821,11 @@
 	hints.ai_socktype = SOCK_DGRAM;	/* make numeric port happy */
 	error = getaddrinfo(hostp, pbuf, &hints, &res);
 	if (error) {
-		PyGAI_Err(error);
+		set_gaierror(error);
 		goto fail;
 	}
 	if (res->ai_next) {
-		PyErr_SetString(PySocket_Error,
+		PyErr_SetString(socket_error,
 			"sockaddr resolved to multiple addresses");
 		goto fail;
 	}
@@ -2852,7 +2835,7 @@
 		char *t1;
 		int t2;
 		if (PyArg_ParseTuple(sa, "si", &t1, &t2) == 0) {
-			PyErr_SetString(PySocket_Error,
+			PyErr_SetString(socket_error,
 				"IPv4 sockaddr must be 2 tuple");
 			goto fail;
 		}
@@ -2872,7 +2855,7 @@
 	error = getnameinfo(res->ai_addr, res->ai_addrlen,
 			hbuf, sizeof(hbuf), pbuf, sizeof(pbuf), flags);
 	if (error) {
-		PyGAI_Err(error);
+		set_gaierror(error);
 		goto fail;
 	}
 	ret = Py_BuildValue("ss", hbuf, pbuf);
@@ -2890,64 +2873,83 @@
 
 /* List of functions exported by this module. */
 
-static PyMethodDef PySocket_methods[] = {
-	{"gethostbyname",	PySocket_gethostbyname,
+static PyMethodDef socket_methods[] = {
+	{"gethostbyname",	socket_gethostbyname,
 	 METH_VARARGS, gethostbyname_doc},
-	{"gethostbyname_ex",	PySocket_gethostbyname_ex,
+	{"gethostbyname_ex",	socket_gethostbyname_ex,
 	 METH_VARARGS, ghbn_ex_doc},
-	{"gethostbyaddr",	PySocket_gethostbyaddr,
+	{"gethostbyaddr",	socket_gethostbyaddr,
 	 METH_VARARGS, gethostbyaddr_doc},
-	{"gethostname",		PySocket_gethostname,
+	{"gethostname",		socket_gethostname,
 	 METH_VARARGS, gethostname_doc},
-	{"getservbyname",	PySocket_getservbyname,
+	{"getservbyname",	socket_getservbyname,
 	 METH_VARARGS, getservbyname_doc},
-	{"getprotobyname",	PySocket_getprotobyname,
+	{"getprotobyname",	socket_getprotobyname,
 	 METH_VARARGS,getprotobyname_doc},
 #ifndef NO_DUP
-	{"fromfd",		PySocket_fromfd,
+	{"fromfd",		socket_fromfd,
 	 METH_VARARGS, fromfd_doc},
 #endif
-	{"ntohs",		PySocket_ntohs,
+	{"ntohs",		socket_ntohs,
 	 METH_VARARGS, ntohs_doc},
-	{"ntohl",		PySocket_ntohl,
+	{"ntohl",		socket_ntohl,
 	 METH_VARARGS, ntohl_doc},
-	{"htons",		PySocket_htons,
+	{"htons",		socket_htons,
 	 METH_VARARGS, htons_doc},
-	{"htonl",		PySocket_htonl,
+	{"htonl",		socket_htonl,
 	 METH_VARARGS, htonl_doc},
-	{"inet_aton",		PySocket_inet_aton,
+	{"inet_aton",		socket_inet_aton,
 	 METH_VARARGS, inet_aton_doc},
-	{"inet_ntoa",		PySocket_inet_ntoa,
+	{"inet_ntoa",		socket_inet_ntoa,
 	 METH_VARARGS, inet_ntoa_doc},
-	{"getaddrinfo",		PySocket_getaddrinfo,
+	{"getaddrinfo",		socket_getaddrinfo,
 	 METH_VARARGS, getaddrinfo_doc},
-	{"getnameinfo",		PySocket_getnameinfo,
+	{"getnameinfo",		socket_getnameinfo,
 	 METH_VARARGS, getnameinfo_doc},
 	{NULL,			NULL}		 /* Sentinel */
 };
 
 
-#ifdef MS_WINDOWS
+#ifdef RISCOS
+#define OS_INIT_DEFINED
 
-/* Additional initialization and cleanup for NT/Windows */
+static int
+os_init(void)
+{
+	_kernel_swi_regs r;
+
+	r.r[0] = 0;
+	_kernel_swi(0x43380, &r, &r);
+	taskwindow = r.r[0];
+
+	return 0;
+}
+
+#endif /* RISCOS */
+
+
+#ifdef MS_WINDOWS
+#define OS_INIT_DEFINED
+
+/* Additional initialization and cleanup for Windows */
 
 static void
-NTcleanup(void)
+os_cleanup(void)
 {
 	WSACleanup();
 }
 
 static int
-NTinit(void)
+os_init(void)
 {
 	WSADATA WSAData;
 	int ret;
 	char buf[100];
 	ret = WSAStartup(0x0101, &WSAData);
 	switch (ret) {
-	case 0:	/* no error */
-		atexit(NTcleanup);
-		return 1;
+	case 0:	/* No error */
+		atexit(os_cleanup);
+		return 1; /* Success */
 	case WSASYSNOTREADY:
 		PyErr_SetString(PyExc_ImportError,
 				"WSAStartup failed: network not ready");
@@ -2964,75 +2966,74 @@
 		PyErr_SetString(PyExc_ImportError, buf);
 		break;
 	}
-	return 0;
+	return 0; /* Failure */
 }
 
 #endif /* MS_WINDOWS */
 
-#if defined(PYOS_OS2)
 
-/* Additional initialization and cleanup for OS/2 */
+#ifdef PYOS_OS2
+#define OS_INIT_DEFINED
 
-static void
-OS2cleanup(void)
-{
-	/* No cleanup is necessary for OS/2 Sockets */
-}
+/* Additional initialization for OS/2 */
 
 static int
-OS2init(void)
+os_init(void)
 {
-#if !defined(PYCC_GCC)
+#ifndef PYCC_GCC
 	char reason[64];
 	int rc = sock_init();
 
 	if (rc == 0) {
-		atexit(OS2cleanup);
-		return 1; /* Indicate Success */
+		return 1; /* Success */
 	}
 
 	PyOS_snprintf(reason, sizeof(reason),
 		      "OS/2 TCP/IP Error# %d", sock_errno());
 	PyErr_SetString(PyExc_ImportError, reason);
 
-	return 0;  /* Indicate Failure */
+	return 0;  /* Failure */
 #else
-	/* no need to initialise sockets with GCC/EMX */
-	return 1;
+	/* No need to initialise sockets with GCC/EMX */
+	return 1; /* Success */
 #endif
 }
 
 #endif /* PYOS_OS2 */
 
+
+#ifndef OS_INIT_DEFINED
+static int
+os_init(void)
+{
+	return 1; /* Success */
+}
+#endif
+
+
 /* C API table - always add new things to the end for binary
    compatibility. */
 static
 PySocketModule_APIObject PySocketModuleAPI =
 {
-	&PySocketSock_Type,
+	&sock_type,
 };
 
-/* Initialize this module.
 
-   This is called when the first 'import socket' is done,
-   via a table in config.c, if config.c is compiled with USE_SOCKET
-   defined.
+/* Initialize the _socket module.
 
-   For MS_WINDOWS (which means any Windows variant), this module
-   is actually called "_socket", and there's a wrapper "socket.py"
-   which implements some missing functionality (such as makefile(),
-   dup() and fromfd()).  The import of "_socket" may fail with an
-   ImportError exception if initialization of WINSOCK fails.  When
-   WINSOCK is initialized succesfully, a call to WSACleanup() is
-   scheduled to be made at exit time.
+   This module is actually called "_socket", and there's a wrapper
+   "socket.py" which implements some additional functionality.  On some
+   platforms (e.g. Windows and OS/2), socket.py also implements a
+   wrapper for the socket type that provides missing functionality such
+   as makefile(), dup() and fromfd().  The import of "_socket" may fail
+   with an ImportError exception if os-specific initialization fails.
+   On Windows, this does WINSOCK initialization.  When WINSOCK is
+   initialized succesfully, a call to WSACleanup() is scheduled to be
+   made at exit time.
+*/
 
-   For OS/2, this module is also called "_socket" and uses a wrapper
-   "socket.py" which implements that functionality that is missing
-   when PC operating systems don't put socket descriptors in the
-   operating system's filesystem layer.
- */
-
-static char module_doc[] =
+static char socket_doc[] =
 "Implementation module for socket operations.  See the socket module\n\
 for documentation.";
 
@@ -3040,53 +3041,42 @@
 init_socket(void)
 {
 	PyObject *m;
-#ifdef RISCOS
-	_kernel_swi_regs r;
-	r.r[0]=0;
-	_kernel_swi(0x43380, &r, &r);
-	taskwindow = r.r[0];
-#else
-#ifdef MS_WINDOWS
-	if (!NTinit())
-		return;
-#else
-#if defined(PYOS_OS2)
-	if (!OS2init())
-		return;
-#endif /* PYOS_OS2 */
-#endif /* MS_WINDOWS */
-#endif /* RISCOS */
-	PySocketSock_Type.ob_type = &PyType_Type;
-	PySocketSock_Type.tp_getattro = PyObject_GenericGetAttr;
-	PySocketSock_Type.tp_alloc = PyType_GenericAlloc;
-	PySocketSock_Type.tp_free = PyObject_Del;
-	m = Py_InitModule3(PySocket_MODULE_NAME,
-			   PySocket_methods,
-			   module_doc);
 
-	PySocket_Error = PyErr_NewException("socket.error", NULL, NULL);
-	if (PySocket_Error == NULL)
+	if (!os_init())
 		return;
-	Py_INCREF(PySocket_Error);
-	PyModule_AddObject(m, "error", PySocket_Error);
-	PyH_Error = PyErr_NewException("socket.herror", PySocket_Error, NULL);
-	if (PyH_Error == NULL)
+
+	sock_type.ob_type = &PyType_Type;
+	sock_type.tp_getattro = PyObject_GenericGetAttr;
+	sock_type.tp_alloc = PyType_GenericAlloc;
+	sock_type.tp_free = PyObject_Del;
+	m = Py_InitModule3(PySocket_MODULE_NAME,
+			   socket_methods,
+			   socket_doc);
+
+	socket_error = PyErr_NewException("socket.error", NULL, NULL);
+	if (socket_error == NULL)
 		return;
-	Py_INCREF(PyH_Error);
-	PyModule_AddObject(m, "herror", PyH_Error);
-	PyGAI_Error = PyErr_NewException("socket.gaierror", PySocket_Error,
+	Py_INCREF(socket_error);
+	PyModule_AddObject(m, "error", socket_error);
+	socket_herror = PyErr_NewException("socket.herror",
+					   socket_error, NULL);
+	if (socket_herror == NULL)
+		return;
+	Py_INCREF(socket_herror);
+	PyModule_AddObject(m, "herror", socket_herror);
+	socket_gaierror = PyErr_NewException("socket.gaierror", socket_error,
 	    NULL);
-	if (PyGAI_Error == NULL)
+	if (socket_gaierror == NULL)
 		return;
-	Py_INCREF(PyGAI_Error);
-	PyModule_AddObject(m, "gaierror", PyGAI_Error);
-	Py_INCREF((PyObject *)&PySocketSock_Type);
+	Py_INCREF(socket_gaierror);
+	PyModule_AddObject(m, "gaierror", socket_gaierror);
+	Py_INCREF((PyObject *)&sock_type);
 	if (PyModule_AddObject(m, "SocketType",
-			       (PyObject *)&PySocketSock_Type) != 0)
+			       (PyObject *)&sock_type) != 0)
 		return;
-	Py_INCREF((PyObject *)&PySocketSock_Type);
+	Py_INCREF((PyObject *)&sock_type);
 	if (PyModule_AddObject(m, "socket",
-			       (PyObject *)&PySocketSock_Type) != 0)
+			       (PyObject *)&sock_type) != 0)
 		return;
 
 	/* Export C API */
@@ -3669,12 +3659,15 @@
 #endif
 }
 
-/* Simplistic emulation code for inet_pton that only works for IPv4 */
+
 #ifndef HAVE_INET_PTON
+
+/* Simplistic emulation code for inet_pton that only works for IPv4 */
+
 int
-inet_pton (int af, const char *src, void *dst)
+inet_pton(int af, const char *src, void *dst)
 {
-	if (af == AF_INET){
+	if (af == AF_INET) {
 		long packed_addr;
 		packed_addr = inet_addr(src);
 		if (packed_addr == INADDR_NONE)
@@ -3700,4 +3693,5 @@
 	/* Should set errno to EAFNOSUPPORT */
 	return NULL;
 }
+
 #endif