Arjun Chennu wrote:
No need to flush because you're writing to a file and it'll be flushed

    anyway when you close it.


True. I had introduced those flush lines while I was trying to troubleshoot this annoying situation. :-)

    You've closed the file view, but the underlying socket is still open.


    The server will see EOF only when the socket is closed by the client,
    and closing the file view doesn't close the socket itself.


That's what I intended to do. Keep the socket open, but close the file object so that the direction of transfer can be reversed and a "done" message can be sent to the client.

TCP is meant to facilitate two-directional transfer innit? So how do I do that while using file objects? If i have to close the socket to do that, it seems a bit wasteful in terms of network 'transactions'

Thanks for your reply. I've already confirmed that closing the socket does indeed move the program ahead --- but I'd like to now make two-directional comm. possible.

Here's a trick borrowed from the POP3 format (used for email).

Server code:
    ...
    cf = conn.makefile('r', 0)    # file like obj for socket
    lf = open('ccs.txt', 'w')
    for line in cf:
        if line == '.end\n':
            break
        if line.startswith('..'):
            line = line[1 : ]
        lf.write(line)
        sys.stdout.write(line)
        print len(line)
    lf.close()
    cf.close()
    ...


Client code:
    ...
    cf = s.makefile('w', 0)
    for line in sfp.readlines():
        if line.startswith('.'):
            cf.write('.')
        cf.write(line)
        print len(line)
    cr.write('.end\n')
    print 'close'
    cf.close()
    ...
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to