Error: child process close a socket inherited from parent
narke
narkewoody at gmail.com
Sun May 29 04:53:44 EDT 2011
Hi,
As illustrated in the following simple sample:
import sys
import os
import socket
class Server:
def __init__(self):
self._listen_sock = None
def _talk_to_client(self, conn, addr):
text = 'The brown fox jumps over the lazy dog.\n'
while True:
conn.send(text)
data = conn.recv(1024)
if not data:
break
conn.close()
def listen(self, port):
self._listen_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self._listen_sock.bind(('', port))
self._listen_sock.listen(128)
self._wait_conn()
def _wait_conn(self):
while True:
conn, addr = self._listen_sock.accept()
if os.fork() == 0:
self._listen_sock.close() # line x
self._talk_to_client(conn, addr)
else:
conn.close()
if __name__ == '__main__':
Server().listen(int(sys.argv[1]))
Unless I comment out the line x, I will get a 'Bad file descriptor'
error when my tcp client program (e.g, telnet) closes the connection to
the server. But as I understood, a child process can close a unused
socket (file descriptor).
Do you know what's wrong here?
--
Life is the only flaw in an otherwise perfect nonexistence
-- Schopenhauer
narke
More information about the Python-list
mailing list