On 2011-05-29, narke <narkewo...@gmail.com> wrote: > 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? > >
I forgot to say, it's Python 2.6.4 running on linux 2.6.33 -- Life is the only flaw in an otherwise perfect nonexistence -- Schopenhauer narke -- http://mail.python.org/mailman/listinfo/python-list