diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index c200b2d..0eb3fd5 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -580,6 +580,13 @@
 	return res;
 }
 
+static char accept_doc[] =
+"accept() -> (socket object, address info)\n\
+\n\
+Wait for an incoming connection.  Return a new socket representing the\n\
+connection, and the address of the client.  For IP sockets, the address\n\
+info is a pair (hostaddr, port).";
+
 
 /* s.setblocking(1 | 0) method */
 
@@ -615,6 +622,12 @@
 	return Py_None;
 }
 
+static char setblocking_doc[] =
+"setblocking(flag)\n\
+\n\
+Set the socket to blocking (flag is true) or non-blocking (false).\n\
+This uses the FIONBIO ioctl with the O_NDELAY flag.";
+
 
 /* s.setsockopt() method.
    With an integer third argument, sets an integer option.
@@ -648,6 +661,12 @@
 	return Py_None;
 }
 
+static char setsockopt_doc[] =
+"setsockopt(level, option, value)\n\
+\n\
+Set a socket option.  See the Unix manual for level and option.\n\
+The value argument can either be an integer or a string.";
+
 
 /* s.getsockopt() method.
    With two arguments, retrieves an integer option.
@@ -693,6 +712,13 @@
 	return buf;
 }
 
+static char getsockopt_doc[] =
+"getsockopt(level, option[, buffersize]) -> value\n\
+\n\
+Get a socket option.  See the Unix manual for level and option.\n\
+If a nonzero buffersize argument is given, the return value is a\n\
+string of that length; otherwise it is an integer.";
+
 
 /* s.bind(sockaddr) method */
 
@@ -713,6 +739,12 @@
 	return Py_None;
 }
 
+static char bind_doc[] =
+"bind(address)\n\
+\n\
+Bind the socket to a local address.  For IP sockets, the address is a\n\
+pair (host, port); the host must refer to the local host.";
+
 
 /* s.close() method.
    Set the file descriptor to -1 so operations tried subsequently
@@ -733,6 +765,11 @@
 	return Py_None;
 }
 
+static char close_doc[] =
+"close()\n\
+\n\
+Close the socket.  It cannot be used after this call.";
+
 
 /* s.connect(sockaddr) method */
 
@@ -753,6 +790,12 @@
 	return Py_None;
 }
 
+static char connect_doc[] =
+"connect(address)\n\
+\n\
+Connect the socket to a remote address.  For IP sockets, the address\n\
+is a pair (host, port).";
+
 
 /* s.connect_ex(sockaddr) method */
 
@@ -772,6 +815,12 @@
 	return PyInt_FromLong((long) res);
 }
 
+static char connect_ex_doc[] =
+"connect_ex(address)\n\
+\n\
+This is like connect(address), but returns an error code (the errno value)\n\
+instead of raising an exception when an error occurs.";
+
 
 /* s.fileno() method */
 
@@ -783,6 +832,11 @@
 	return PyInt_FromLong((long) s->sock_fd);
 }
 
+static char fileno_doc[] =
+"fileno() -> integer\n\
+\n\
+Return the integer file descriptor of the socket.";
+
 
 #ifndef NO_DUP
 /* s.dup() method */
@@ -805,6 +859,12 @@
 		close(newfd);
 	return sock;
 }
+
+static char dup_doc[] =
+"dup() -> socket object\n\
+\n\
+Return a new socket object connected to the same system resource.";
+
 #endif
 
 
@@ -828,6 +888,12 @@
 	return makesockaddr((struct sockaddr *) addrbuf, addrlen);
 }
 
+static char getsockname_doc[] =
+"getsockname() -> address info\n\
+\n\
+Return the address of the local endpoint.  For IP sockets, the address\n\
+info is a pair (hostaddr, port).";
+
 
 #ifdef HAVE_GETPEERNAME		/* Cray APP doesn't have this :-( */
 /* s.getpeername() method */
@@ -848,6 +914,13 @@
 		return PySocket_Err();
 	return makesockaddr((struct sockaddr *) addrbuf, addrlen);
 }
+
+static char getpeername_doc[] =
+"getpeername() -> address info\n\
+\n\
+Return the address of the remote endpoint.  For IP sockets, the address\n\
+info is a pair (hostaddr, port).";
+
 #endif /* HAVE_GETPEERNAME */
 
 
@@ -871,6 +944,14 @@
 	return Py_None;
 }
 
+static char listen_doc[] =
+"listen(backlog)\n\
+\n\
+Enable a server to accept connections.  The backlog argument must be at\n\
+least 1; it specifies the number of unaccepted connection that the system\n\
+will allow before refusing new connections.";
+
+
 #ifndef NO_DUP
 /* s.makefile(mode) method.
    Create a new open file object referring to a dupped version of
@@ -892,12 +973,12 @@
 	if (!PyArg_ParseTuple(args, "|si", &mode, &bufsize))
 		return NULL;
 #ifdef MS_WIN32
-   if ( ((fd =  _open_osfhandle( s->sock_fd, _O_BINARY )) < 0) ||
-        ((fd = dup(fd)) < 0) || ((fp = fdopen(fd, mode)) == NULL)) {
+	if (((fd = _open_osfhandle(s->sock_fd, _O_BINARY)) < 0) ||
+	    ((fd = dup(fd)) < 0) || ((fp = fdopen(fd, mode)) == NULL))
 #else
-	if ((fd = dup(s->sock_fd)) < 0 ||
-	    (fp = fdopen(fd, mode)) == NULL) {
+	if ((fd = dup(s->sock_fd)) < 0 || (fp = fdopen(fd, mode)) == NULL)
 #endif
+	{
 		if (fd >= 0)
 			close(fd);
 		return PySocket_Err();
@@ -907,8 +988,16 @@
 		PyFile_SetBufSize(f, bufsize);
 	return f;
 }
+
+static char makefile_doc[] =
+"makefile([mode[, buffersize]]) -> file object\n\
+\n\
+Return a regular file object corresponding to the socket.\n\
+The mode and buffersize arguments are as for the built-in open() function.";
+
 #endif /* NO_DUP */
 
+ 
 /* s.recv(nbytes [,flags]) method */
 
 static PyObject *
@@ -933,6 +1022,14 @@
 	return buf;
 }
 
+static char recv_doc[] =
+"recv(buffersize[, flags]) -> data\n\
+\n\
+Receive up to buffersize bytes from the socket.  For the optional flags\n\
+argument, see the Unix manual.  When no data is available, block until\n\
+at least one byte is available or until the remote end is closed.  When\n\
+the remote end is closed and all data is read, return the empty string.";
+
 
 /* s.recvfrom(nbytes [,flags]) method */
 
@@ -982,6 +1079,11 @@
 	return ret;
 }
 
+static char recvfrom_doc[] =
+"recvfrom(buffersize[, flags]) -> (data, address info)\n\
+\n\
+Like recv(buffersize, flags) but also return the sender's address info.";
+
 
 /* s.send(data [,flags]) method */
 
@@ -1000,6 +1102,12 @@
 	return PyInt_FromLong((long)n);
 }
 
+static char send_doc[] =
+"send(data[, flags])\n\
+\n\
+Send a data string to the socket.  For the optional flags\n\
+argument, see the Unix manual.";
+
 
 /* s.sendto(data, [flags,] sockaddr) method */
 
@@ -1026,6 +1134,12 @@
 	return PyInt_FromLong((long)n);
 }
 
+static char sendto_doc[] =
+"sendto(data[, flags], address)\n\
+\n\
+Like send(data, flags) but allows specifying the destination address.\n\
+For IP sockets, the address is a pair (hostaddr, port).";
+
 
 /* s.shutdown(how) method */
 
@@ -1045,35 +1159,60 @@
 	return Py_None;
 }
 
+static char shutdown_doc[] =
+"shutdown(flag)\n\
+\n\
+Shut down the reading side of the socket (flag == 0), the writing side\n\
+of the socket (flag == 1), or both ends (flag == 2).";
+
 
 /* List of methods for socket objects */
 
 static PyMethodDef PySocketSock_methods[] = {
-	{"accept",		(PyCFunction)PySocketSock_accept},
-	{"setblocking",		(PyCFunction)PySocketSock_setblocking},
-	{"setsockopt",		(PyCFunction)PySocketSock_setsockopt},
-	{"getsockopt",		(PyCFunction)PySocketSock_getsockopt, 1},
-	{"bind",		(PyCFunction)PySocketSock_bind},
-	{"close",		(PyCFunction)PySocketSock_close},
-	{"connect",		(PyCFunction)PySocketSock_connect},
-	{"connect_ex",		(PyCFunction)PySocketSock_connect_ex},
-	{"fileno",		(PyCFunction)PySocketSock_fileno},
+	{"accept",		(PyCFunction)PySocketSock_accept, 0,
+				accept_doc},
+	{"bind",		(PyCFunction)PySocketSock_bind, 0,
+				bind_doc},
+	{"close",		(PyCFunction)PySocketSock_close, 0,
+				close_doc},
+	{"connect",		(PyCFunction)PySocketSock_connect, 0,
+				connect_doc},
+	{"connect_ex",		(PyCFunction)PySocketSock_connect_ex, 0,
+				connect_ex_doc},
 #ifndef NO_DUP
-	{"dup",			(PyCFunction)PySocketSock_dup},
+	{"dup",			(PyCFunction)PySocketSock_dup, 0,
+				dup_doc},
 #endif
-	{"getsockname",		(PyCFunction)PySocketSock_getsockname},
+	{"fileno",		(PyCFunction)PySocketSock_fileno, 0,
+				fileno_doc},
 #ifdef HAVE_GETPEERNAME
-	{"getpeername",		(PyCFunction)PySocketSock_getpeername},
+	{"getpeername",		(PyCFunction)PySocketSock_getpeername, 0,
+				getpeername_doc},
 #endif
-	{"listen",		(PyCFunction)PySocketSock_listen},
+	{"getsockname",		(PyCFunction)PySocketSock_getsockname, 0,
+				getsockname_doc},
+	{"getsockopt",		(PyCFunction)PySocketSock_getsockopt, 1,
+				getsockopt_doc},
+	{"listen",		(PyCFunction)PySocketSock_listen, 0,
+				listen_doc},
 #ifndef NO_DUP
-	{"makefile",		(PyCFunction)PySocketSock_makefile, 1},
+	{"makefile",		(PyCFunction)PySocketSock_makefile, 1,
+				makefile_doc},
 #endif
-	{"recv",		(PyCFunction)PySocketSock_recv, 1},
-	{"recvfrom",		(PyCFunction)PySocketSock_recvfrom, 1},
-	{"send",		(PyCFunction)PySocketSock_send, 1},
-	{"sendto",		(PyCFunction)PySocketSock_sendto},
-	{"shutdown",		(PyCFunction)PySocketSock_shutdown},
+	{"recv",		(PyCFunction)PySocketSock_recv, 1,
+				recv_doc},
+	{"recvfrom",		(PyCFunction)PySocketSock_recvfrom, 1,
+				recvfrom_doc},
+	{"send",		(PyCFunction)PySocketSock_send, 1,
+				send_doc},
+	{"sendto",		(PyCFunction)PySocketSock_sendto, 0,
+				sendto_doc},
+	{"setblocking",		(PyCFunction)PySocketSock_setblocking, 0,
+				setblocking_doc},
+	{"setsockopt",		(PyCFunction)PySocketSock_setsockopt, 0,
+				setsockopt_doc},
+	{"shutdown",		(PyCFunction)PySocketSock_shutdown, 0,
+				shutdown_doc},
 	{NULL,			NULL}		/* sentinel */
 };
 
@@ -1148,6 +1287,11 @@
 	return PyString_FromString(buf);
 }
 
+static char gethostname_doc[] =
+"gethostname() -> string\n\
+\n\
+Return the current host name.";
+
 
 /* Python interface to gethostbyname(name). */
 
@@ -1164,6 +1308,12 @@
 	return makeipaddr(&addrbuf);
 }
 
+static char gethostbyname_doc[] =
+"gethostbyname(host) -> address\n\
+\n\
+Return the IP address (a string of the form '255.255.255.255') for a host.";
+
+
 /* Python interface to gethostbyaddr(IP). */
 
 /*ARGSUSED*/
@@ -1249,6 +1399,12 @@
 	return rtn_tuple;
 }
 
+static char gethostbyaddr_doc[] =
+"gethostbyaddr(host) -> (name, aliaslist, addresslist)\n\
+\n\
+Return the true host name, a list of aliases, and a list of IP addresses,\n\
+for a host.  The host argument is a string giving a host name or IP number.";
+
 
 /* Python interface to getservbyname(name).
    This only returns the port number, since the other info is already
@@ -1272,6 +1428,12 @@
 	return PyInt_FromLong((long) ntohs(sp->s_port));
 }
 
+static char getservbyname_doc[] =
+"getservbyname(servicename, protocolname) -> integer\n\
+\n\
+Return a port number from a service name and protocol name.\n\
+The protocol name should be 'tcp' or 'udp'.";
+
 
 /* Python interface to getprotobyname(name).
    This only returns the protocol number, since the other info is
@@ -1295,6 +1457,11 @@
 	return PyInt_FromLong((long) sp->p_proto);
 }
 
+static char getprotobyname_doc[] =
+"getprotobyname(name) -> integer\n\
+\n\
+Return the protocol number for the named protocol.  (Rarely used.)";
+
 
 /* Python interface to socket(family, type, proto).
    The third (protocol) argument is optional.
@@ -1335,6 +1502,16 @@
 	return (PyObject *) s;
 }
 
+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 is normally AF_INET, sometimes AF_UNIX.\n\
+The type argument specifies whether this is a stream (SOCK_STREAM)\n\
+or datagram (SOCK_DGRAM) socket.  The protocol argument defaults to 0,\n\
+specifying the default protocol.";
+
+
 #ifndef NO_DUP
 /* Create a socket object from a numeric file description.
    Useful e.g. if stdin is a socket.
@@ -1360,8 +1537,16 @@
 #endif   
 	return (PyObject *) s;
 }
+
+static char fromfd_doc[] =
+"fromfd(fd, family, type[, proto]) -> socket object\n\
+\n\
+Create a socket object from the given file descriptor.\n\
+The remaining arguments are the same as for socket().";
+
 #endif /* NO_DUP */
 
+
 static PyObject *
 BUILD_FUNC_DEF_2(PySocket_ntohs, PyObject *, self, PyObject *, args)
 {
@@ -1374,6 +1559,12 @@
 	return PyInt_FromLong(x2);
 }
 
+static char ntohs_doc[] =
+"ntohs(integer) -> integer\n\
+\n\
+Convert a 16-bit integer from network to host byte order.";
+
+
 static PyObject *
 BUILD_FUNC_DEF_2(PySocket_ntohl, PyObject *, self, PyObject *, args)
 {
@@ -1386,6 +1577,12 @@
 	return PyInt_FromLong(x2);
 }
 
+static char ntohl_doc[] =
+"ntohl(integer) -> integer\n\
+\n\
+Convert a 32-bit integer from network to host byte order.";
+
+
 static PyObject *
 BUILD_FUNC_DEF_2(PySocket_htons, PyObject *, self, PyObject *, args)
 {
@@ -1398,6 +1595,12 @@
 	return PyInt_FromLong(x2);
 }
 
+static char htons_doc[] =
+"htons(integer) -> integer\n\
+\n\
+Convert a 16-bit integer from host to network byte order.";
+
+
 static PyObject *
 BUILD_FUNC_DEF_2(PySocket_htonl, PyObject *, self, PyObject *, args)
 {
@@ -1410,22 +1613,28 @@
 	return PyInt_FromLong(x2);
 }
 
+static char htonl_doc[] =
+"htonl(integer) -> integer\n\
+\n\
+Convert a 32-bit integer from host to network byte order.";
+
+
 /* List of functions exported by this module. */
 
 static PyMethodDef PySocket_methods[] = {
-	{"gethostbyname",	PySocket_gethostbyname},
-	{"gethostbyaddr",	PySocket_gethostbyaddr},
-	{"gethostname",		PySocket_gethostname},
-	{"getservbyname",	PySocket_getservbyname},
-	{"getprotobyname",	PySocket_getprotobyname},
-	{"socket",		PySocket_socket, 1},
+	{"gethostbyname",	PySocket_gethostbyname, 0, gethostbyname_doc},
+	{"gethostbyaddr",	PySocket_gethostbyaddr, 0, gethostbyaddr_doc},
+	{"gethostname",		PySocket_gethostname, 0, gethostname_doc},
+	{"getservbyname",	PySocket_getservbyname, 0, getservbyname_doc},
+	{"getprotobyname",	PySocket_getprotobyname, 0,getprotobyname_doc},
+	{"socket",		PySocket_socket, 1, socket_doc},
 #ifndef NO_DUP
-	{"fromfd",		PySocket_fromfd, 1},
+	{"fromfd",		PySocket_fromfd, 1, fromfd_doc},
 #endif
-	{"ntohs",		PySocket_ntohs},
-	{"ntohl",		PySocket_ntohl},
-	{"htons",		PySocket_htons},
-	{"htonl",		PySocket_htonl},
+	{"ntohs",		PySocket_ntohs, 0, ntohs_doc},
+	{"ntohl",		PySocket_ntohl, 0, ntohl_doc},
+	{"htons",		PySocket_htons, 0, htons_doc},
+	{"htonl",		PySocket_htonl, 0, htonl_doc},
 	{NULL,			NULL}		 /* Sentinel */
 };
 
@@ -1534,6 +1743,66 @@
  *   operating system's filesystem layer.
  */
 
+static char module_doc[] =
+"This module provides socket operations and some related functions.\n\
+On Unix, it supports IP (Internet Protocol) and Unix domain sockets.\n\
+On other systems, it only supports IP.\n\
+\n\
+Functions:\n\
+\n\
+socket() -- create a new socket object\n\
+fromfd() -- create a socket object from an open file descriptor (*)\n\
+gethostname() -- return the current hostname\n\
+gethostbyname() -- map a hostname to its IP number\n\
+gethostbyaddr() -- map an IP number or hostname to DNS info\n\
+getservbyname() -- map a service name and a protocol name to a port number\n\
+getprotobyname() -- mape a protocol name (e.g. 'tcp') to a number\n\
+ntohs(), ntohl() -- convert 16, 32 bit int from network to host byte order\n\
+htons(), htonl() -- convert 16, 32 bit int from host to network byte order\n\
+\n\
+(*) not available on all platforms!)\n\
+\n\
+Special objects:\n\
+\n\
+SocketType -- type object for socket objects\n\
+error -- exception raised for I/O errors\n\
+\n\
+Integer constants:\n\
+\n\
+AF_INET, AF_UNIX -- socket domains (first argument to socket() call)\n\
+SOCK_STREAM, SOCK_DGRAM, SOCK_RAW -- socket types (second argument)\n\
+\n\
+Many other constants may be defined; these may be used in calls to\n\
+the setsockopt() and getsockopt() methods.\n\
+";
+
+static char sockettype_doc[] =
+"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 tot the socket (*)\n\
+recv() -- receive data\n\
+recvfrom() -- receive data and sender's address\n\
+send() -- send data\n\
+sendto() -- send data to a given address\n\
+setblocking() -- set or clear the blocking I/O flag\n\
+setsockopt() -- set socket options\n\
+shutdown() -- shut down traffic in one or both directions\n\
+\n\
+(*) not available on all platforms!)";
+
 void
 #if defined(MS_WINDOWS) || defined(PYOS_OS2)
 init_socket()
@@ -1545,14 +1814,14 @@
 #ifdef MS_WINDOWS
 	if (!NTinit())
 		return;
-	m = Py_InitModule("_socket", PySocket_methods);
+	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
 #else
 #if defined(__TOS_OS2__)
 	if (!OS2init())
 		return;
-	m = Py_InitModule("_socket", PySocket_methods);
+	m = Py_InitModule3("_socket", PySocket_methods, module_doc);
 #else
-	m = Py_InitModule("socket", PySocket_methods);
+	m = Py_InitModule3("socket", PySocket_methods, module_doc);
 #endif
 #endif
 	d = PyModule_GetDict(m);
@@ -1561,6 +1830,7 @@
 		return;
 	PyDict_SetItemString(d, "error", PySocket_Error);
 	PySocketSock_Type.ob_type = &PyType_Type;
+	PySocketSock_Type.tp_doc = sockettype_doc;
 	Py_INCREF(&PySocketSock_Type);
 	if (PyDict_SetItemString(d, "SocketType",
 				 (PyObject *)&PySocketSock_Type) != 0)
