Using read() on a socket(AF_INET, SOCK_STREAM) connected via any network interface (e.g eth0) and putting this interface down (ifconfig) while the socket is in read() produces a hanger (the read() will not return anymore). Even if I install sigaction signal handler I got no signal when the interface is removed.
This may be ok on a major interface like eth0 but it is a problem when using a ppp interface via GSM data or GPRS connection. Killing the pppd while the socket waits in read() produces the same behaviour. Also a broken connection looks the same. It is reproducable on several 2.6 kernel versions including the lastest stable 2.6.21. On my understanding "ifconfig down" should lead into a read() error. Unfortunately I am not very familiar with in-depth kernel programming and I am still wondering about the magic inside the kernel: ifconfig -> net/dev.c:dev_close() notifies a call chain which probably could/should handle this. But I miss the dependency to net/ipv4/tcp.c: tcp_recvmsg() function. This is where I think my receive is blocking. Can someone give me a hint where to look? Thanks and kind regards Chris p.s. This happens only, when socket is in blocking mode. I am using a simple example like: s = socket(); connect(s); while(){ read(s) } - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html