diff --git a/Doc/lib/libsocket.tex b/Doc/lib/libsocket.tex
index 9b71f1f..913bb8f 100644
--- a/Doc/lib/libsocket.tex
+++ b/Doc/lib/libsocket.tex
@@ -1,7 +1,7 @@
 \section{Built-in Module \sectcode{socket}}
 \label{module-socket}
-
 \bimodindex{socket}
+
 This module provides access to the BSD \emph{socket} interface.
 It is available on \UNIX{} systems that support this interface.
 
@@ -16,17 +16,17 @@
 
 The Python interface is a straightforward transliteration of the
 \UNIX{} system call and library interface for sockets to Python's
-object-oriented style: the \code{socket()} function returns a
+object-oriented style: the \function{socket()} function returns a
 \dfn{socket object} whose methods implement the various socket system
 calls.  Parameter types are somewhat higher-level than in the C
-interface: as with \code{read()} and \code{write()} operations on Python
-files, buffer allocation on receive operations is automatic, and
-buffer length is implicit on send operations.
+interface: as with \method{read()} and \method{write()} operations on
+Python files, buffer allocation on receive operations is automatic,
+and buffer length is implicit on send operations.
 
 Socket addresses are represented as a single string for the
-\code{AF_UNIX} address family and as a pair
-\code{(\var{host}, \var{port})} for the \code{AF_INET} address family,
-where \var{host} is a string representing
+\constant{AF_UNIX} address family and as a pair
+\code{(\var{host}, \var{port})} for the \constant{AF_INET} address
+family, where \var{host} is a string representing
 either a hostname in Internet domain notation like
 \code{'daring.cwi.nl'} or an IP address like \code{'100.50.200.5'},
 and \var{port} is an integral port number.  Other address families are
@@ -35,8 +35,8 @@
 specified when the socket object was created.
 
 For IP addresses, two special forms are accepted instead of a host
-address: the empty string represents \code{INADDR_ANY}, and the string
-\code{"<broadcast>"} represents \code{INADDR_BROADCAST}.
+address: the empty string represents \constant{INADDR_ANY}, and the string
+\code{"<broadcast>"} represents \constant{INADDR_BROADCAST}.
 
 All errors raise exceptions.  The normal exceptions for invalid
 argument types and out-of-memory conditions can be raised; errors
@@ -45,9 +45,9 @@
 Non-blocking mode is supported through the \code{setblocking()}
 method.
 
-The module \code{socket} exports the following constants and functions:
+The module \module{socket} exports the following constants and functions:
 
-\setindexsubitem{(in module socket)}
+
 \begin{excdesc}{error}
 This exception is raised for socket- or address-related errors.
 The accompanying value is either a string telling what went wrong or a
@@ -61,8 +61,9 @@
 \begin{datadesc}{AF_UNIX}
 \dataline{AF_INET}
 These constants represent the address (and protocol) families,
-used for the first argument to \code{socket()}.  If the \code{AF_UNIX}
-constant is not defined then this protocol is unsupported.
+used for the first argument to \function{socket()}.  If the
+\constant{AF_UNIX} constant is not defined then this protocol is
+unsupported.
 \end{datadesc}
 
 \begin{datadesc}{SOCK_STREAM}
@@ -71,9 +72,9 @@
 \dataline{SOCK_RDM}
 \dataline{SOCK_SEQPACKET}
 These constants represent the socket types,
-used for the second argument to \code{socket()}.
-(Only \code{SOCK_STREAM} and
-\code{SOCK_DGRAM} appear to be generally useful.)
+used for the second argument to \function{socket()}.
+(Only \constant{SOCK_STREAM} and
+\constant{SOCK_DGRAM} appear to be generally useful.)
 \end{datadesc}
 
 \begin{datadesc}{SO_*}
@@ -86,8 +87,8 @@
 \dataline{IP_*}
 Many constants of these forms, documented in the \UNIX{} documentation on
 sockets and/or the IP protocol, are also defined in the socket module.
-They are generally used in arguments to the \code{setsockopt} and
-\code{getsockopt} methods of socket objects.  In most cases, only
+They are generally used in arguments to the \method{setsockopt()} and
+\method{getsockopt()} methods of socket objects.  In most cases, only
 those symbols that are defined in the \UNIX{} header files are defined;
 for a few symbols, default values are provided.
 \end{datadesc}
@@ -101,20 +102,19 @@
 \begin{funcdesc}{gethostname}{}
 Return a string containing the hostname of the machine where 
 the Python interpreter is currently executing.  If you want to know the
-current machine's IP address, use
-\code{socket.gethostbyname(socket.gethostname())}.
-Note: \code{gethostname()} doesn't always return the fully qualified
-domain name; use \code{socket.gethostbyaddr(socket.gethostname())}
+current machine's IP address, use \code{gethostbyname(gethostname())}.
+Note: \function{gethostname()} doesn't always return the fully qualified
+domain name; use \code{gethostbyaddr(gethostname())}
 (see below).
 \end{funcdesc}
 
 \begin{funcdesc}{gethostbyaddr}{ip_address}
-Return a triple \code{(hostname, aliaslist, ipaddrlist)} where
-\code{hostname} is the primary host name responding to the given
-\var{ip_address}, \code{aliaslist} is a (possibly empty) list of
-alternative host names for the same address, and \code{ipaddrlist} is
-a list of IP addresses for the same interface on the same
-host (most likely containing only a single address).
+Return a triple \code{(\var{hostname}, \var{aliaslist},
+\var{ipaddrlist})} where \var{hostname} is the primary host name
+responding to the given \var{ip_address}, \var{aliaslist} is a
+(possibly empty) list of alternative host names for the same address,
+and \var{ipaddrlist} is a list of IP addresses for the same interface
+on the same host (most likely containing only a single address).
 To find the fully qualified domain name, check \var{hostname} and the
 items of \var{aliaslist} for an entry containing at least one period.
 \end{funcdesc}
@@ -122,29 +122,29 @@
 \begin{funcdesc}{getprotobyname}{protocolname}
 Translate an Internet protocol name (e.g. \code{'icmp'}) to a constant
 suitable for passing as the (optional) third argument to the
-\code{socket()} function.  This is usually only needed for sockets
-opened in ``raw'' mode (\code{SOCK_RAW}); for the normal socket modes,
-the correct protocol is chosen automatically if the protocol is
+\function{socket()} function.  This is usually only needed for sockets
+opened in ``raw'' mode (\constant{SOCK_RAW}); for the normal socket
+modes, the correct protocol is chosen automatically if the protocol is
 omitted or zero.
 \end{funcdesc}
 
-\begin{funcdesc}{getservbyname}{servicename\, protocolname}
+\begin{funcdesc}{getservbyname}{servicename, protocolname}
 Translate an Internet service name and protocol name to a port number
 for that service.  The protocol name should be \code{'tcp'} or
 \code{'udp'}.
 \end{funcdesc}
 
-\begin{funcdesc}{socket}{family\, type\optional{\, proto}}
+\begin{funcdesc}{socket}{family, type\optional{, proto}}
 Create a new socket using the given address family, socket type and
-protocol number.  The address family should be \code{AF_INET} or
-\code{AF_UNIX}.  The socket type should be \code{SOCK_STREAM},
-\code{SOCK_DGRAM} or perhaps one of the other \samp{SOCK_} constants.
+protocol number.  The address family should be \constant{AF_INET} or
+\constant{AF_UNIX}.  The socket type should be \constant{SOCK_STREAM},
+\constant{SOCK_DGRAM} or perhaps one of the other \samp{SOCK_} constants.
 The protocol number is usually zero and may be omitted in that case.
 \end{funcdesc}
 
-\begin{funcdesc}{fromfd}{fd\, family\, type\optional{\, proto}}
+\begin{funcdesc}{fromfd}{fd, family, type\optional{, proto}}
 Build a socket object from an existing file descriptor (an integer as
-returned by a file object's \code{fileno} method).  Address family,
+returned by a file object's \method{fileno()} method).  Address family,
 socket type and protocol number are as for the \code{socket} function
 above.  The file descriptor should refer to a socket, but this is not
 checked --- subsequent operations on the object may fail if the file
@@ -180,15 +180,14 @@
 
 \begin{datadesc}{SocketType}
 This is a Python type object that represents the socket object type.
-It is the same as \code{type(socket.socket(...))}.
+It is the same as \code{type(socket(...))}.
 \end{datadesc}
 
 \subsection{Socket Objects}
 
-\noindent
 Socket objects have the following methods.  Except for
-\code{makefile()} these correspond to \UNIX{} system calls applicable to
-sockets.
+\method{makefile()} these correspond to \UNIX{} system calls
+applicable to sockets.
 
 \setindexsubitem{(socket method)}
 \begin{funcdesc}{accept}{}
@@ -213,19 +212,20 @@
 
 \begin{funcdesc}{connect}{address}
 Connect to a remote socket at \var{address}.
-(The format of \var{address} depends on the address family --- see above.)
+(The format of \var{address} depends on the address family --- see
+above.)
 \end{funcdesc}
 
 \begin{funcdesc}{connect_ex}{address}
 Like \code{connect(\var{address})}, but return an error indicator
 instead of raising an exception.  The error indicator is 0 if the
-operation succeeded, otherwise the value of the \code{errno}
+operation succeeded, otherwise the value of the \cdata{errno}
 variable.  This is useful e.g. for asynchronous connects.
 \end{funcdesc}
 
 \begin{funcdesc}{fileno}{}
 Return the socket's file descriptor (a small integer).  This is useful
-with \code{select}.
+with \function{select.select()}.
 \end{funcdesc}
 
 \begin{funcdesc}{getpeername}{}
@@ -242,16 +242,16 @@
 see above.)
 \end{funcdesc}
 
-\begin{funcdesc}{getsockopt}{level\, optname\optional{\, buflen}}
+\begin{funcdesc}{getsockopt}{level, optname\optional{, buflen}}
 Return the value of the given socket option (see the \UNIX{} man page
-\emph{getsockopt}(2)).  The needed symbolic constants (\code{SO_*} etc.)
-are defined in this module.  If \var{buflen}
+\manpage{getsockopt}{2}).  The needed symbolic constants
+(\constant{SO_*} etc.) are defined in this module.  If \var{buflen}
 is absent, an integer option is assumed and its integer value
 is returned by the function.  If \var{buflen} is present, it specifies
 the maximum length of the buffer used to receive the option in, and
 this buffer is returned as a string.  It is up to the caller to decode
 the contents of the buffer (see the optional built-in module
-\code{struct} for a way to decode C structures encoded as strings).
+\module{struct} for a way to decode C structures encoded as strings).
 \end{funcdesc}
 
 \begin{funcdesc}{listen}{backlog}
@@ -262,42 +262,42 @@
 
 \begin{funcdesc}{makefile}{\optional{mode\optional{\, bufsize}}}
 Return a \dfn{file object} associated with the socket.  (File objects
-were described earlier under Built-in Types.)  The file object
-references a \code{dup()}ped version of the socket file descriptor, so
-the file object and socket object may be closed or garbage-collected
-independently.  The optional \var{mode} and \var{bufsize} arguments
-are interpreted the same way as by the built-in
-\code{open()} function.
+were described earlier in \ref{bltin-file-objects}, ``File Objects.'')
+The file object references a \cfunction{dup()}ped version of the
+socket file descriptor, so the file object and socket object may be
+closed or garbage-collected independently.  The optional \var{mode}
+and \var{bufsize} arguments are interpreted the same way as by the
+built-in \function{open()} function.
 \end{funcdesc}
 
-\begin{funcdesc}{recv}{bufsize\optional{\, flags}}
+\begin{funcdesc}{recv}{bufsize\optional{, flags}}
 Receive data from the socket.  The return value is a string representing
 the data received.  The maximum amount of data to be received
 at once is specified by \var{bufsize}.  See the \UNIX{} manual page
-for the meaning of the optional argument \var{flags}; it defaults to
-zero.
+\manpage{recv}{2} for the meaning of the optional argument
+\var{flags}; it defaults to zero.
 \end{funcdesc}
 
-\begin{funcdesc}{recvfrom}{bufsize\optional{\, flags}}
+\begin{funcdesc}{recvfrom}{bufsize\optional{, flags}}
 Receive data from the socket.  The return value is a pair
 \code{(\var{string}, \var{address})} where \var{string} is a string
 representing the data received and \var{address} is the address of the
 socket sending the data.  The optional \var{flags} argument has the
-same meaning as for \code{recv()} above.
+same meaning as for \method{recv()} above.
 (The format of \var{address} depends on the address family --- see above.)
 \end{funcdesc}
 
-\begin{funcdesc}{send}{string\optional{\, flags}}
+\begin{funcdesc}{send}{string\optional{, flags}}
 Send data to the socket.  The socket must be connected to a remote
 socket.  The optional \var{flags} argument has the same meaning as for
-\code{recv()} above.  Return the number of bytes sent.
+\method{recv()} above.  Returns the number of bytes sent.
 \end{funcdesc}
 
 \begin{funcdesc}{sendto}{string\optional{\, flags}\, address}
 Send data to the socket.  The socket should not be connected to a
 remote socket, since the destination socket is specified by
-\code{address}.  The optional \var{flags} argument has the same
-meaning as for \code{recv()} above.  Return the number of bytes sent.
+\var{address}.  The optional \var{flags} argument has the same
+meaning as for \method{recv()} above.  Return the number of bytes sent.
 (The format of \var{address} depends on the address family --- see above.)
 \end{funcdesc}
 
@@ -305,30 +305,32 @@
 Set blocking or non-blocking mode of the socket: if \var{flag} is 0,
 the socket is set to non-blocking, else to blocking mode.  Initially
 all sockets are in blocking mode.  In non-blocking mode, if a
-\code{recv} call doesn't find any data, or if a \code{send} call can't
-immediately dispose of the data, a \code{socket.error} exception is
+\method{recv()} call doesn't find any data, or if a \code{send} call can't
+immediately dispose of the data, a \exception{error} exception is
 raised; in blocking mode, the calls block until they can proceed.
 \end{funcdesc}
 
 \begin{funcdesc}{setsockopt}{level\, optname\, value}
 Set the value of the given socket option (see the \UNIX{} man page
-\emph{setsockopt}(2)).  The needed symbolic constants are defined in
-the \code{socket} module (\code{SO_*} etc.).  The value can be an
+\manpage{setsockopt}{2}).  The needed symbolic constants are defined in
+the \module{socket} module (\code{SO_*} etc.).  The value can be an
 integer or a string representing a buffer.  In the latter case it is
 up to the caller to ensure that the string contains the proper bits
 (see the optional built-in module
-\code{struct} for a way to encode C structures as strings).
+\module{struct}\refbimodindex{struct} for a way to encode C structures
+as strings). 
 \end{funcdesc}
 
 \begin{funcdesc}{shutdown}{how}
-Shut down one or both halves of the connection.  If \var{how} is \code{0},
-further receives are disallowed.  If \var{how} is \code{1}, further sends are
-disallowed.  If \var{how} is \code{2}, further sends and receives are
-disallowed.
+Shut down one or both halves of the connection.  If \var{how} is
+\code{0}, further receives are disallowed.  If \var{how} is \code{1},
+further sends are disallowed.  If \var{how} is \code{2}, further sends
+and receives are disallowed.
 \end{funcdesc}
 
-Note that there are no methods \code{read()} or \code{write()}; use
-\code{recv()} and \code{send()} without \var{flags} argument instead.
+Note that there are no methods \method{read()} or \method{write()};
+use \method{recv()} and \method{send()} without \var{flags} argument
+instead.
 
 \subsection{Example}
 \nodename{Socket Example}
@@ -336,12 +338,13 @@
 Here are two minimal example programs using the TCP/IP protocol:\ a
 server that echoes all data that it receives back (servicing only one
 client), and a client using it.  Note that a server must perform the
-sequence \code{socket}, \code{bind}, \code{listen}, \code{accept}
-(possibly repeating the \code{accept} to service more than one client),
-while a client only needs the sequence \code{socket}, \code{connect}.
-Also note that the server does not \code{send}/\code{receive} on the
+sequence \function{socket()}, \method{bind()}, \method{listen()},
+\method{accept()} (possibly repeating the \method{accept()} to service
+more than one client), while a client only needs the sequence
+\function{socket()}, \method{connect()}.  Also note that the server
+does not \method{send()}/\method{recv()} on the 
 socket it is listening on but on the new socket returned by
-\code{accept}.
+\method{accept()}.
 
 \begin{verbatim}
 # Echo server program
@@ -359,7 +362,7 @@
     conn.send(data)
 conn.close()
 \end{verbatim}
-%
+
 \begin{verbatim}
 # Echo client program
 from socket import *
@@ -372,7 +375,7 @@
 s.close()
 print 'Received', `data`
 \end{verbatim}
-%
+
 \begin{seealso}
 \seemodule{SocketServer}{classes that simplify writing network servers}
 \end{seealso}
diff --git a/Doc/libsocket.tex b/Doc/libsocket.tex
index 9b71f1f..913bb8f 100644
--- a/Doc/libsocket.tex
+++ b/Doc/libsocket.tex
@@ -1,7 +1,7 @@
 \section{Built-in Module \sectcode{socket}}
 \label{module-socket}
-
 \bimodindex{socket}
+
 This module provides access to the BSD \emph{socket} interface.
 It is available on \UNIX{} systems that support this interface.
 
@@ -16,17 +16,17 @@
 
 The Python interface is a straightforward transliteration of the
 \UNIX{} system call and library interface for sockets to Python's
-object-oriented style: the \code{socket()} function returns a
+object-oriented style: the \function{socket()} function returns a
 \dfn{socket object} whose methods implement the various socket system
 calls.  Parameter types are somewhat higher-level than in the C
-interface: as with \code{read()} and \code{write()} operations on Python
-files, buffer allocation on receive operations is automatic, and
-buffer length is implicit on send operations.
+interface: as with \method{read()} and \method{write()} operations on
+Python files, buffer allocation on receive operations is automatic,
+and buffer length is implicit on send operations.
 
 Socket addresses are represented as a single string for the
-\code{AF_UNIX} address family and as a pair
-\code{(\var{host}, \var{port})} for the \code{AF_INET} address family,
-where \var{host} is a string representing
+\constant{AF_UNIX} address family and as a pair
+\code{(\var{host}, \var{port})} for the \constant{AF_INET} address
+family, where \var{host} is a string representing
 either a hostname in Internet domain notation like
 \code{'daring.cwi.nl'} or an IP address like \code{'100.50.200.5'},
 and \var{port} is an integral port number.  Other address families are
@@ -35,8 +35,8 @@
 specified when the socket object was created.
 
 For IP addresses, two special forms are accepted instead of a host
-address: the empty string represents \code{INADDR_ANY}, and the string
-\code{"<broadcast>"} represents \code{INADDR_BROADCAST}.
+address: the empty string represents \constant{INADDR_ANY}, and the string
+\code{"<broadcast>"} represents \constant{INADDR_BROADCAST}.
 
 All errors raise exceptions.  The normal exceptions for invalid
 argument types and out-of-memory conditions can be raised; errors
@@ -45,9 +45,9 @@
 Non-blocking mode is supported through the \code{setblocking()}
 method.
 
-The module \code{socket} exports the following constants and functions:
+The module \module{socket} exports the following constants and functions:
 
-\setindexsubitem{(in module socket)}
+
 \begin{excdesc}{error}
 This exception is raised for socket- or address-related errors.
 The accompanying value is either a string telling what went wrong or a
@@ -61,8 +61,9 @@
 \begin{datadesc}{AF_UNIX}
 \dataline{AF_INET}
 These constants represent the address (and protocol) families,
-used for the first argument to \code{socket()}.  If the \code{AF_UNIX}
-constant is not defined then this protocol is unsupported.
+used for the first argument to \function{socket()}.  If the
+\constant{AF_UNIX} constant is not defined then this protocol is
+unsupported.
 \end{datadesc}
 
 \begin{datadesc}{SOCK_STREAM}
@@ -71,9 +72,9 @@
 \dataline{SOCK_RDM}
 \dataline{SOCK_SEQPACKET}
 These constants represent the socket types,
-used for the second argument to \code{socket()}.
-(Only \code{SOCK_STREAM} and
-\code{SOCK_DGRAM} appear to be generally useful.)
+used for the second argument to \function{socket()}.
+(Only \constant{SOCK_STREAM} and
+\constant{SOCK_DGRAM} appear to be generally useful.)
 \end{datadesc}
 
 \begin{datadesc}{SO_*}
@@ -86,8 +87,8 @@
 \dataline{IP_*}
 Many constants of these forms, documented in the \UNIX{} documentation on
 sockets and/or the IP protocol, are also defined in the socket module.
-They are generally used in arguments to the \code{setsockopt} and
-\code{getsockopt} methods of socket objects.  In most cases, only
+They are generally used in arguments to the \method{setsockopt()} and
+\method{getsockopt()} methods of socket objects.  In most cases, only
 those symbols that are defined in the \UNIX{} header files are defined;
 for a few symbols, default values are provided.
 \end{datadesc}
@@ -101,20 +102,19 @@
 \begin{funcdesc}{gethostname}{}
 Return a string containing the hostname of the machine where 
 the Python interpreter is currently executing.  If you want to know the
-current machine's IP address, use
-\code{socket.gethostbyname(socket.gethostname())}.
-Note: \code{gethostname()} doesn't always return the fully qualified
-domain name; use \code{socket.gethostbyaddr(socket.gethostname())}
+current machine's IP address, use \code{gethostbyname(gethostname())}.
+Note: \function{gethostname()} doesn't always return the fully qualified
+domain name; use \code{gethostbyaddr(gethostname())}
 (see below).
 \end{funcdesc}
 
 \begin{funcdesc}{gethostbyaddr}{ip_address}
-Return a triple \code{(hostname, aliaslist, ipaddrlist)} where
-\code{hostname} is the primary host name responding to the given
-\var{ip_address}, \code{aliaslist} is a (possibly empty) list of
-alternative host names for the same address, and \code{ipaddrlist} is
-a list of IP addresses for the same interface on the same
-host (most likely containing only a single address).
+Return a triple \code{(\var{hostname}, \var{aliaslist},
+\var{ipaddrlist})} where \var{hostname} is the primary host name
+responding to the given \var{ip_address}, \var{aliaslist} is a
+(possibly empty) list of alternative host names for the same address,
+and \var{ipaddrlist} is a list of IP addresses for the same interface
+on the same host (most likely containing only a single address).
 To find the fully qualified domain name, check \var{hostname} and the
 items of \var{aliaslist} for an entry containing at least one period.
 \end{funcdesc}
@@ -122,29 +122,29 @@
 \begin{funcdesc}{getprotobyname}{protocolname}
 Translate an Internet protocol name (e.g. \code{'icmp'}) to a constant
 suitable for passing as the (optional) third argument to the
-\code{socket()} function.  This is usually only needed for sockets
-opened in ``raw'' mode (\code{SOCK_RAW}); for the normal socket modes,
-the correct protocol is chosen automatically if the protocol is
+\function{socket()} function.  This is usually only needed for sockets
+opened in ``raw'' mode (\constant{SOCK_RAW}); for the normal socket
+modes, the correct protocol is chosen automatically if the protocol is
 omitted or zero.
 \end{funcdesc}
 
-\begin{funcdesc}{getservbyname}{servicename\, protocolname}
+\begin{funcdesc}{getservbyname}{servicename, protocolname}
 Translate an Internet service name and protocol name to a port number
 for that service.  The protocol name should be \code{'tcp'} or
 \code{'udp'}.
 \end{funcdesc}
 
-\begin{funcdesc}{socket}{family\, type\optional{\, proto}}
+\begin{funcdesc}{socket}{family, type\optional{, proto}}
 Create a new socket using the given address family, socket type and
-protocol number.  The address family should be \code{AF_INET} or
-\code{AF_UNIX}.  The socket type should be \code{SOCK_STREAM},
-\code{SOCK_DGRAM} or perhaps one of the other \samp{SOCK_} constants.
+protocol number.  The address family should be \constant{AF_INET} or
+\constant{AF_UNIX}.  The socket type should be \constant{SOCK_STREAM},
+\constant{SOCK_DGRAM} or perhaps one of the other \samp{SOCK_} constants.
 The protocol number is usually zero and may be omitted in that case.
 \end{funcdesc}
 
-\begin{funcdesc}{fromfd}{fd\, family\, type\optional{\, proto}}
+\begin{funcdesc}{fromfd}{fd, family, type\optional{, proto}}
 Build a socket object from an existing file descriptor (an integer as
-returned by a file object's \code{fileno} method).  Address family,
+returned by a file object's \method{fileno()} method).  Address family,
 socket type and protocol number are as for the \code{socket} function
 above.  The file descriptor should refer to a socket, but this is not
 checked --- subsequent operations on the object may fail if the file
@@ -180,15 +180,14 @@
 
 \begin{datadesc}{SocketType}
 This is a Python type object that represents the socket object type.
-It is the same as \code{type(socket.socket(...))}.
+It is the same as \code{type(socket(...))}.
 \end{datadesc}
 
 \subsection{Socket Objects}
 
-\noindent
 Socket objects have the following methods.  Except for
-\code{makefile()} these correspond to \UNIX{} system calls applicable to
-sockets.
+\method{makefile()} these correspond to \UNIX{} system calls
+applicable to sockets.
 
 \setindexsubitem{(socket method)}
 \begin{funcdesc}{accept}{}
@@ -213,19 +212,20 @@
 
 \begin{funcdesc}{connect}{address}
 Connect to a remote socket at \var{address}.
-(The format of \var{address} depends on the address family --- see above.)
+(The format of \var{address} depends on the address family --- see
+above.)
 \end{funcdesc}
 
 \begin{funcdesc}{connect_ex}{address}
 Like \code{connect(\var{address})}, but return an error indicator
 instead of raising an exception.  The error indicator is 0 if the
-operation succeeded, otherwise the value of the \code{errno}
+operation succeeded, otherwise the value of the \cdata{errno}
 variable.  This is useful e.g. for asynchronous connects.
 \end{funcdesc}
 
 \begin{funcdesc}{fileno}{}
 Return the socket's file descriptor (a small integer).  This is useful
-with \code{select}.
+with \function{select.select()}.
 \end{funcdesc}
 
 \begin{funcdesc}{getpeername}{}
@@ -242,16 +242,16 @@
 see above.)
 \end{funcdesc}
 
-\begin{funcdesc}{getsockopt}{level\, optname\optional{\, buflen}}
+\begin{funcdesc}{getsockopt}{level, optname\optional{, buflen}}
 Return the value of the given socket option (see the \UNIX{} man page
-\emph{getsockopt}(2)).  The needed symbolic constants (\code{SO_*} etc.)
-are defined in this module.  If \var{buflen}
+\manpage{getsockopt}{2}).  The needed symbolic constants
+(\constant{SO_*} etc.) are defined in this module.  If \var{buflen}
 is absent, an integer option is assumed and its integer value
 is returned by the function.  If \var{buflen} is present, it specifies
 the maximum length of the buffer used to receive the option in, and
 this buffer is returned as a string.  It is up to the caller to decode
 the contents of the buffer (see the optional built-in module
-\code{struct} for a way to decode C structures encoded as strings).
+\module{struct} for a way to decode C structures encoded as strings).
 \end{funcdesc}
 
 \begin{funcdesc}{listen}{backlog}
@@ -262,42 +262,42 @@
 
 \begin{funcdesc}{makefile}{\optional{mode\optional{\, bufsize}}}
 Return a \dfn{file object} associated with the socket.  (File objects
-were described earlier under Built-in Types.)  The file object
-references a \code{dup()}ped version of the socket file descriptor, so
-the file object and socket object may be closed or garbage-collected
-independently.  The optional \var{mode} and \var{bufsize} arguments
-are interpreted the same way as by the built-in
-\code{open()} function.
+were described earlier in \ref{bltin-file-objects}, ``File Objects.'')
+The file object references a \cfunction{dup()}ped version of the
+socket file descriptor, so the file object and socket object may be
+closed or garbage-collected independently.  The optional \var{mode}
+and \var{bufsize} arguments are interpreted the same way as by the
+built-in \function{open()} function.
 \end{funcdesc}
 
-\begin{funcdesc}{recv}{bufsize\optional{\, flags}}
+\begin{funcdesc}{recv}{bufsize\optional{, flags}}
 Receive data from the socket.  The return value is a string representing
 the data received.  The maximum amount of data to be received
 at once is specified by \var{bufsize}.  See the \UNIX{} manual page
-for the meaning of the optional argument \var{flags}; it defaults to
-zero.
+\manpage{recv}{2} for the meaning of the optional argument
+\var{flags}; it defaults to zero.
 \end{funcdesc}
 
-\begin{funcdesc}{recvfrom}{bufsize\optional{\, flags}}
+\begin{funcdesc}{recvfrom}{bufsize\optional{, flags}}
 Receive data from the socket.  The return value is a pair
 \code{(\var{string}, \var{address})} where \var{string} is a string
 representing the data received and \var{address} is the address of the
 socket sending the data.  The optional \var{flags} argument has the
-same meaning as for \code{recv()} above.
+same meaning as for \method{recv()} above.
 (The format of \var{address} depends on the address family --- see above.)
 \end{funcdesc}
 
-\begin{funcdesc}{send}{string\optional{\, flags}}
+\begin{funcdesc}{send}{string\optional{, flags}}
 Send data to the socket.  The socket must be connected to a remote
 socket.  The optional \var{flags} argument has the same meaning as for
-\code{recv()} above.  Return the number of bytes sent.
+\method{recv()} above.  Returns the number of bytes sent.
 \end{funcdesc}
 
 \begin{funcdesc}{sendto}{string\optional{\, flags}\, address}
 Send data to the socket.  The socket should not be connected to a
 remote socket, since the destination socket is specified by
-\code{address}.  The optional \var{flags} argument has the same
-meaning as for \code{recv()} above.  Return the number of bytes sent.
+\var{address}.  The optional \var{flags} argument has the same
+meaning as for \method{recv()} above.  Return the number of bytes sent.
 (The format of \var{address} depends on the address family --- see above.)
 \end{funcdesc}
 
@@ -305,30 +305,32 @@
 Set blocking or non-blocking mode of the socket: if \var{flag} is 0,
 the socket is set to non-blocking, else to blocking mode.  Initially
 all sockets are in blocking mode.  In non-blocking mode, if a
-\code{recv} call doesn't find any data, or if a \code{send} call can't
-immediately dispose of the data, a \code{socket.error} exception is
+\method{recv()} call doesn't find any data, or if a \code{send} call can't
+immediately dispose of the data, a \exception{error} exception is
 raised; in blocking mode, the calls block until they can proceed.
 \end{funcdesc}
 
 \begin{funcdesc}{setsockopt}{level\, optname\, value}
 Set the value of the given socket option (see the \UNIX{} man page
-\emph{setsockopt}(2)).  The needed symbolic constants are defined in
-the \code{socket} module (\code{SO_*} etc.).  The value can be an
+\manpage{setsockopt}{2}).  The needed symbolic constants are defined in
+the \module{socket} module (\code{SO_*} etc.).  The value can be an
 integer or a string representing a buffer.  In the latter case it is
 up to the caller to ensure that the string contains the proper bits
 (see the optional built-in module
-\code{struct} for a way to encode C structures as strings).
+\module{struct}\refbimodindex{struct} for a way to encode C structures
+as strings). 
 \end{funcdesc}
 
 \begin{funcdesc}{shutdown}{how}
-Shut down one or both halves of the connection.  If \var{how} is \code{0},
-further receives are disallowed.  If \var{how} is \code{1}, further sends are
-disallowed.  If \var{how} is \code{2}, further sends and receives are
-disallowed.
+Shut down one or both halves of the connection.  If \var{how} is
+\code{0}, further receives are disallowed.  If \var{how} is \code{1},
+further sends are disallowed.  If \var{how} is \code{2}, further sends
+and receives are disallowed.
 \end{funcdesc}
 
-Note that there are no methods \code{read()} or \code{write()}; use
-\code{recv()} and \code{send()} without \var{flags} argument instead.
+Note that there are no methods \method{read()} or \method{write()};
+use \method{recv()} and \method{send()} without \var{flags} argument
+instead.
 
 \subsection{Example}
 \nodename{Socket Example}
@@ -336,12 +338,13 @@
 Here are two minimal example programs using the TCP/IP protocol:\ a
 server that echoes all data that it receives back (servicing only one
 client), and a client using it.  Note that a server must perform the
-sequence \code{socket}, \code{bind}, \code{listen}, \code{accept}
-(possibly repeating the \code{accept} to service more than one client),
-while a client only needs the sequence \code{socket}, \code{connect}.
-Also note that the server does not \code{send}/\code{receive} on the
+sequence \function{socket()}, \method{bind()}, \method{listen()},
+\method{accept()} (possibly repeating the \method{accept()} to service
+more than one client), while a client only needs the sequence
+\function{socket()}, \method{connect()}.  Also note that the server
+does not \method{send()}/\method{recv()} on the 
 socket it is listening on but on the new socket returned by
-\code{accept}.
+\method{accept()}.
 
 \begin{verbatim}
 # Echo server program
@@ -359,7 +362,7 @@
     conn.send(data)
 conn.close()
 \end{verbatim}
-%
+
 \begin{verbatim}
 # Echo client program
 from socket import *
@@ -372,7 +375,7 @@
 s.close()
 print 'Received', `data`
 \end{verbatim}
-%
+
 \begin{seealso}
 \seemodule{SocketServer}{classes that simplify writing network servers}
 \end{seealso}
