Ricky Beam (
Wed, 13 Sep 1995 18:12:48 -0400 (EDT)

I've not paid any attention to this since I first discovered it last year
playing with ytalk...

In icmp.c, there is an error convert struct that sets icmp message fatality
levels. The one for ECONNREFUSED (ICMP_PORT_UNREACH) is marked as fatal.
That's not too godd for talk and it's family of code... it is using the same
udp port/socket to send to BOTH ntalk and otalk services. If you try this
to a machine running only one kind of talk (otalk), then you get back an
ICMP_PORT_UNREACH message which the kernel signals the process with the
ECONNREFUSED and then closes the socket -- it's a fatal error. I fixed this
on my machine by removing the fatal flag -- 1 -> 0. But I have no idea
how many RFC's that violates or even if that is a good idea. In practice,
it has never caused any problems.

In theory, you really should treat UDP and TCP sockets differently, but
that's another thread.


BTW: for 1.3.25: (/usr/src/linux-1.3.25/net/ipv4/icmp.c)
line 148 -> { ECONNREFUSED, 1 }, /* ICMP_PORT_UNREACH */
becomes -> { ECONNREFUSED, 0 }, /* ICMP_PORT_UNREACH */ /*CRAMER*/