关于socke编程的一个问题
LZ正在看UNIX 网络编程那本书 看到第六章开始有个问题搞了好几天都没弄明白 因此特来请教大家
I/O复用那章开头说:当客户阻塞在fgets期间,服务器子进程被杀死,服务器TCP虽然正确的给客户TCP发送了一个FIN,但是客户进程正阻塞于从标准输入读入的过程,它将看不到这个EOF,直到从套接字读时为止(可能已经过了过了很长时间)。
我的问题是:1)这个EOF是怎么来的?2)它将看不到这个EOF该怎么理解啊?
[解决办法]
服务器关闭套接字连接后,客户端从连接中只能读到一个EOF,表示结尾了。就像你从文件中读数据一样,读到末尾就会读到一个EOF结束符。套接字关闭后,读到最后也是一个EOF结束符。因为UNIX 把很多东西都当成文件处理。
而客户端阻塞与fgets调用,而没有去读套接字,也就发现不了EOF了。
[解决办法]
不是将FIN转换为EOF,你可以认为,服务端关闭连接前的一瞬间往连接中写了一个EOF。读到EOF就表示对方关闭了连接。