Date: Sat, 7 Dec 1996 17:34:49 -0700 (MST) From: Ade Barkah <mbarkah@hemi.com> To: joerg_wunsch@uriah.heep.sax.de Cc: freebsd-hackers@freebsd.org Subject: Re: bug in 2.2-alpha loopback (?) Message-ID: <199612080034.RAA27465@hemi.com> In-Reply-To: <199612071213.NAA18370@uriah.heep.sax.de> from "J Wunsch" at Dec 7, 96 01:13:18 pm
index | next in thread | previous in thread | raw e-mail
> I can't reproduce this with your test program:
>
> j@uriah 1455% ./bar
> Waiting for client on port 2000
> Attention, read() returned 0.
Sorry, I wasn't very careful considering all the variables. This
might be a "telnet" problem instead of a loop interface problem
(My 2.2 machine is located remotely, so that's why I noticed it.)
I have been telnetting into the 2.2 machine, "telnet localhost
2000", then close the first telnet.
The problem occurs when I telnet into a FreeBSD machine, _then_
telnet again to port 2000, issue the escape character, and
close the connection.
So, we have:
Machine A ---telnet---> Machine B ---telnet---> Machine C
Where the program is running on Machine C, and Machine B is
a FreeBSD 2.1 or 2.2 system. Machine B's telnet gets really
confused when we close Machine A's telnet.
Please try:
1. Run the program
2. From another window / virtual terminal, "telnet localhost",
log back in, then "telnet localhost 2000", issue ctrl-],
and quit (or close).
I changed my program to count how many \004s it receives, and
on my machines I get:
./read
Waiting for client on port 2000
read() returned 0, exiting.
Received 278 EOF (CTRL-D) markers.
(The exact number of CTRL-Ds it receives varies.) For clarity,
the program does the following:
nCtrl = 0;
for (c = 0; c < 1000 ; c++) {
ret=read (fd, &ch, 1);
if (ret == 0) {
printf ("read() returned 0, exiting.\n");
break;
}
if (ch == 4)
++nCtrl;
}
printf ("Received %d EOF (CTRL-D) markers.\n", nCtrl);
(It doesn't make a difference if recv() is used instead of read().)
The problem does not occur if I replace the middle machine with
a non-FreeBSD machine (well, I've only tried Solaris 2.5.1,
VMS V5.5-2, and various Cisco boxes.) It doesn't matter what
O/S machine A or machine C is running.
Hmm, are programs supposed to check for an EOF in the input
stream ?
Thanks,
-Ade
-------------------------------------------------------------------
Inet: mbarkah@hemi.com - HEMISPHERE ONLINE - <http://www.hemi.com/>
-------------------------------------------------------------------
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199612080034.RAA27465>
