diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2011-12-05 00:47:40 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2011-12-05 00:47:40 (GMT) |
commit | 3731142e190b63ac2a505727329dc0d527346037 (patch) | |
tree | b7c9a9909fc6e45dfc4c3a62687128f06701553e /Doc/howto/sockets.rst | |
parent | 9b1ec97867ffd46eb134ea63012a0d9a57ac0b5b (diff) | |
parent | 5b73ca4b3d5d53f949636eb5678ea31569adbdba (diff) | |
download | cpython-3731142e190b63ac2a505727329dc0d527346037.zip cpython-3731142e190b63ac2a505727329dc0d527346037.tar.gz cpython-3731142e190b63ac2a505727329dc0d527346037.tar.bz2 |
Merge assorted fixes from 3.2
Diffstat (limited to 'Doc/howto/sockets.rst')
-rw-r--r-- | Doc/howto/sockets.rst | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/Doc/howto/sockets.rst b/Doc/howto/sockets.rst index 324ea0a..8ee334a 100644 --- a/Doc/howto/sockets.rst +++ b/Doc/howto/sockets.rst @@ -60,11 +60,10 @@ Creating a Socket Roughly speaking, when you clicked on the link that brought you to this page, your browser did something like the following:: - #create an INET, STREAMing socket + # create an INET, STREAMing socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - #now connect to the web server on port 80 - # - the normal http port - s.connect(("www.mcmillan-inc.com", 80)) + # now connect to the web server on port 80 - the normal http port + s.connect(("www.python.org", 80)) When the ``connect`` completes, the socket ``s`` can be used to send in a request for the text of the page. The same socket will read the @@ -75,13 +74,11 @@ exchanges). What happens in the web server is a bit more complex. First, the web server creates a "server socket":: - #create an INET, STREAMing socket - serversocket = socket.socket( - socket.AF_INET, socket.SOCK_STREAM) - #bind the socket to a public host, - # and a well-known port + # create an INET, STREAMing socket + serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + # bind the socket to a public host, and a well-known port serversocket.bind((socket.gethostname(), 80)) - #become a server socket + # become a server socket serversocket.listen(5) A couple things to notice: we used ``socket.gethostname()`` so that the socket @@ -101,10 +98,10 @@ Now that we have a "server" socket, listening on port 80, we can enter the mainloop of the web server:: while True: - #accept connections from outside + # accept connections from outside (clientsocket, address) = serversocket.accept() - #now do something with the clientsocket - #in this case, we'll pretend this is a threaded server + # now do something with the clientsocket + # in this case, we'll pretend this is a threaded server ct = client_thread(clientsocket) ct.run() @@ -126,12 +123,13 @@ IPC --- If you need fast IPC between two processes on one machine, you should look into -whatever form of shared memory the platform offers. A simple protocol based -around shared memory and locks or semaphores is by far the fastest technique. +pipes or shared memory. If you do decide to use AF_INET sockets, bind the +"server" socket to ``'localhost'``. On most platforms, this will take a +shortcut around a couple of layers of network code and be quite a bit faster. -If you do decide to use sockets, bind the "server" socket to ``'localhost'``. On -most platforms, this will take a shortcut around a couple of layers of network -code and be quite a bit faster. +.. seealso:: + The :mod:`multiprocessing` integrates cross-platform IPC into a higher-level + API. Using a Socket @@ -300,7 +298,7 @@ When Sockets Die Probably the worst thing about using blocking sockets is what happens when the other side comes down hard (without doing a ``close``). Your socket is likely to -hang. SOCKSTREAM is a reliable protocol, and it will wait a long, long time +hang. TCP is a reliable protocol, and it will wait a long, long time before giving up on a connection. If you're using threads, the entire thread is essentially dead. There's not much you can do about it. As long as you aren't doing something dumb, like holding a lock while doing a blocking read, the |