broken network connection

Pranay Srivastava pranjas at gmail.com
Fri Nov 7 06:47:50 EST 2014


Hi

On Fri, Nov 7, 2014 at 2:37 AM, Grzegorz Dwornicki <gd1100 at gmail.com> wrote:
>
> Hi
>
> I have a big interest in how kernel handles this situaction.
>
> Lets assume that we have two hosts: host 1 and host 2 and on host 1 I
> have started this command:
> nc -l -p 4444
> on host 2 I have started this command (2 means IP addres of second host here!):
> nc 2 4444
>
> Now i can send msgs betweem them. In time I have decided to end
> connection. To do this I'm using ctrl+c on host 2. What functions are
> called to clean broken socket on host 1? What functions are called to
> clean up socket on host 2?
>

I'm not expert on this but from what your steps suggests at the kernel
level both machines know there's no communication
between them.

When you hit ctl+c or send your process signal which is not handled
then by default that process is killed.
When you open a socket, it's actually linked to a file via sockfs,
this is socket is on your opened file lists so assuming you didn't
forked and the refcount was still 1 for this sockfs inode the do_exit
would perform cleanup when it calls fput on these opened files.

That would terminate the socket by calling sock_release, see
net/socket.c. So the application at the other end doesn't yet know
about it but it'll when it attempts to go and read since the kernel at
the other end already knows that this connection has been terminated.

For specific functions you'll need to see net/ipv4[6]/. something like
sock_close/ sock_disconnect?

What would be interesting if you took the ether cable out or just
turned off power? It won't be a clean shutdown then :-p.


> Grzegorz.
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




-- 
        ---P.K.S



More information about the Kernelnewbies mailing list