Commit e4dac538 authored by Senthil Kumaran's avatar Senthil Kumaran

Fix Issue #6005: Examples in the socket library documentation use sendall,

where relevant, instead send method. Patch contributed by Brian Brazil.
parent 04c568fc
.. _socket-howto:
**************************** ****************************
Socket Programming HOWTO Socket Programming HOWTO
**************************** ****************************
......
...@@ -725,7 +725,8 @@ correspond to Unix system calls applicable to sockets. ...@@ -725,7 +725,8 @@ correspond to Unix system calls applicable to sockets.
optional *flags* argument has the same meaning as for :meth:`recv` above. optional *flags* argument has the same meaning as for :meth:`recv` above.
Returns the number of bytes sent. Applications are responsible for checking that Returns the number of bytes sent. Applications are responsible for checking that
all data has been sent; if only some of the data was transmitted, the all data has been sent; if only some of the data was transmitted, the
application needs to attempt delivery of the remaining data. application needs to attempt delivery of the remaining data. For further
information on this concept, consult the :ref:`socket-howto`.
.. method:: socket.sendall(string[, flags]) .. method:: socket.sendall(string[, flags])
...@@ -863,8 +864,8 @@ using it. Note that a server must perform the sequence :func:`socket`, ...@@ -863,8 +864,8 @@ using it. Note that a server must perform the sequence :func:`socket`,
:meth:`~socket.bind`, :meth:`~socket.listen`, :meth:`~socket.accept` (possibly :meth:`~socket.bind`, :meth:`~socket.listen`, :meth:`~socket.accept` (possibly
repeating the :meth:`~socket.accept` to service more than one client), while a repeating the :meth:`~socket.accept` to service more than one client), while a
client only needs the sequence :func:`socket`, :meth:`~socket.connect`. Also client only needs the sequence :func:`socket`, :meth:`~socket.connect`. Also
note that the server does not :meth:`~socket.send`/:meth:`~socket.recv` on the note that the server does not :meth:`~socket.sendall`/:meth:`~socket.recv` on
socket it is listening on but on the new socket returned by the socket it is listening on but on the new socket returned by
:meth:`~socket.accept`. :meth:`~socket.accept`.
The first two examples support IPv4 only. :: The first two examples support IPv4 only. ::
...@@ -882,7 +883,7 @@ The first two examples support IPv4 only. :: ...@@ -882,7 +883,7 @@ The first two examples support IPv4 only. ::
while 1: while 1:
data = conn.recv(1024) data = conn.recv(1024)
if not data: break if not data: break
conn.send(data) conn.sendall(data)
conn.close() conn.close()
:: ::
...@@ -894,7 +895,7 @@ The first two examples support IPv4 only. :: ...@@ -894,7 +895,7 @@ The first two examples support IPv4 only. ::
PORT = 50007 # The same port as used by the server PORT = 50007 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT)) s.connect((HOST, PORT))
s.send('Hello, world') s.sendall('Hello, world')
data = s.recv(1024) data = s.recv(1024)
s.close() s.close()
print 'Received', repr(data) print 'Received', repr(data)
...@@ -966,7 +967,7 @@ sends traffic to the first one connected successfully. :: ...@@ -966,7 +967,7 @@ sends traffic to the first one connected successfully. ::
if s is None: if s is None:
print 'could not open socket' print 'could not open socket'
sys.exit(1) sys.exit(1)
s.send('Hello, world') s.sendall('Hello, world')
data = s.recv(1024) data = s.recv(1024)
s.close() s.close()
print 'Received', repr(data) print 'Received', repr(data)
......
...@@ -360,7 +360,7 @@ This is the server side:: ...@@ -360,7 +360,7 @@ This is the server side::
print "{} wrote:".format(self.client_address[0]) print "{} wrote:".format(self.client_address[0])
print self.data print self.data
# just send back the same data, but upper-cased # just send back the same data, but upper-cased
self.request.send(self.data.upper()) self.request.sendall(self.data.upper())
if __name__ == "__main__": if __name__ == "__main__":
HOST, PORT = "localhost", 9999 HOST, PORT = "localhost", 9999
...@@ -390,7 +390,7 @@ objects that simplify communication by providing the standard file interface):: ...@@ -390,7 +390,7 @@ objects that simplify communication by providing the standard file interface)::
The difference is that the ``readline()`` call in the second handler will call The difference is that the ``readline()`` call in the second handler will call
``recv()`` multiple times until it encounters a newline character, while the ``recv()`` multiple times until it encounters a newline character, while the
single ``recv()`` call in the first handler will just return what has been sent single ``recv()`` call in the first handler will just return what has been sent
from the client in one ``send()`` call. from the client in one ``sendall()`` call.
This is the client side:: This is the client side::
...@@ -407,7 +407,7 @@ This is the client side:: ...@@ -407,7 +407,7 @@ This is the client side::
try: try:
# Connect to server and send data # Connect to server and send data
sock.connect((HOST, PORT)) sock.connect((HOST, PORT))
sock.send(data + "\n") sock.sendall(data + "\n")
# Receive data from the server and shut down # Receive data from the server and shut down
received = sock.recv(1024) received = sock.recv(1024)
...@@ -505,7 +505,7 @@ An example for the :class:`ThreadingMixIn` class:: ...@@ -505,7 +505,7 @@ An example for the :class:`ThreadingMixIn` class::
data = self.request.recv(1024) data = self.request.recv(1024)
cur_thread = threading.current_thread() cur_thread = threading.current_thread()
response = "{}: {}".format(cur_thread.name, data) response = "{}: {}".format(cur_thread.name, data)
self.request.send(response) self.request.sendall(response)
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass pass
...@@ -514,7 +514,7 @@ An example for the :class:`ThreadingMixIn` class:: ...@@ -514,7 +514,7 @@ An example for the :class:`ThreadingMixIn` class::
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, port)) sock.connect((ip, port))
try: try:
sock.send(message) sock.sendall(message)
response = sock.recv(1024) response = sock.recv(1024)
print "Received: {}".format(response) print "Received: {}".format(response)
finally: finally:
......
...@@ -90,6 +90,9 @@ Core and Builtins ...@@ -90,6 +90,9 @@ Core and Builtins
Library Library
------- -------
- Issue #6005: Examples in the socket library documentation use sendall, where
relevant, instead send method.
- Issue #10811: Fix recursive usage of cursors. Instead of crashing, - Issue #10811: Fix recursive usage of cursors. Instead of crashing,
raise a ProgrammingError now. raise a ProgrammingError now.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment