mirror of
https://github.com/python/cpython.git
synced 2025-09-28 11:15:17 +00:00
Fix Issue #6005: Examples in the socket library documentation use sendall,
where relevant, instead send method. Patch contributed by Brian Brazil.
This commit is contained in:
parent
ebf691d64c
commit
607e31eddf
4 changed files with 17 additions and 11 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
.. _socket-howto:
|
||||||
|
|
||||||
****************************
|
****************************
|
||||||
Socket Programming HOWTO
|
Socket Programming HOWTO
|
||||||
****************************
|
****************************
|
||||||
|
|
|
@ -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`,
|
||||||
: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. ::
|
||||||
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. ::
|
||||||
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. ::
|
||||||
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::
|
||||||
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)::
|
||||||
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::
|
||||||
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::
|
||||||
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::
|
||||||
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
|
||||||
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.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue