Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^2: udp send not reporting host unreachable errors

by saurabh.hirani (Beadle)
on May 05, 2009 at 10:52 UTC ( [id://761898]=note: print w/replies, xml ) Need Help??


in reply to Re: udp send not reporting host unreachable errors
in thread udp send not reporting host unreachable errors

I agree that UDP is connection less. But RFC 1122, which mandates the behaviour of Linux for UDP protocol states that whenever ICMP error messages are received, they should be reported to the user application.

I do get "Connection refused" errors for sending data to a non existent UDP socket on a reachable host. Why shouldn't I get an error for a non existent port on an unreachable host?

And as per the content of my post, if SO_BSDCOMPAT option is on, then you get errors if and only if the destination host is up but there is some problem in connecting to the socket.

The UDP man page also states that SO_BSDCOMPAT option has been removed after Linux 2.2. I have Linux 2.6. So why is my application behaving as if SO_BSDCOMPAT option is set?

  • Comment on Re^2: udp send not reporting host unreachable errors

Replies are listed 'Best First'.
Re^3: udp send not reporting host unreachable errors
by JavaFan (Canon) on May 05, 2009 at 11:09 UTC
    I agree that UDP is connection less. But RFC 1122, which mandates the behaviour of Linux for UDP protocol states that whenever ICMP error messages are received, they should be reported to the user application.
    How do you propose this is done? Making the actual send() wait for a possible ICMP package is not practical, as you do not know whether there will come one, and you will not get a success message if the package was accepted. But if you don't wait forever, the program may have terminated before any message arrives.
      How do you propose this is done? Making the actual send() wait for a possible ICMP package is not practical, as you do not know whether there will come one, and you will not get a success message if the package was accepted.
      It is not practical. I am not going to use it. My pursuit is not to know whether the code snippet I wrote is practical, it is - why isn't the application behaving as I think it should? My point is: I should be getting 'Destination Unreachable' errors like I got for 'Connection Refused'.
        saurabh.hirani:

        You don't understand: You'll receive an error only if the machine sends you an error packet which makes it all the way back to your machine. The 'Connection Refused' is a message from the destination machine1 telling you to go away. No machine means there's nothing to receive the packet and send you an error result.

        Why can't some other computer send you a 'Destination Unreachable' message? Well:

        1. Whose responsibility is it to do that? No one has that responsibility.
        2. How can they tell that the host doesn't exist? Since a computer doesn't have to support any network services, there's no way for a different computer on the network to tell if the computer actually exists or not.

        If you require feedback, then you need to use a connection with TCP.

        ...roboticus

        1. Usually it's the computer. Some firewalls, however, can be configured to send a 'Connection Refused' because the network administrator doesn't want that sort of inbound packet.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://761898]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (1)
As of 2024-04-25 04:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found