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 -- http://mail.python.org/mailman/listinfo/python-list