jd@csd4.milw.wisc.edu (James R Drinkwater) (02/05/89)
I've been playing around with BSD4.3 sockets and ran into a problem. The server accepts a connection under the internet address family and and forks. The child duplicates the socket returned from accept as stdin and stdout. It then loops, reading a line from stdin and passing the line to system(). When a blank line, '\n', or read() returns 0,stdout is shutdown with no furthersends or receives allowed. The client loops, reading a line from the keyboard and writes to its socket. The data from the server is read asynchronously when SIGIO is received. If the client's stdin (keyboard) is closed, the socket is shutdown with no further sends allowed. My problem is this: I send the server the line "cat filename". A majority of filename is printed and then the client hangs. After hitting two <RET>'s, the output resumes and usually finishes. Once finished, I send another line to the server. When SIGIO is received, my read() in the io handler returns the error "connection reset by peer". The <RET>'s I sent were interpreted by the server as blank lines so the socket is shutdown. I assume this is what the error means. Why does the output hang?