2011-03-14 58 views
0

我TCP服务器的代码是这样的:套接字连接断开连接异常时,FILE流缓冲区会发生什么情况?

conn_fd = accept(); 
stream = fdopen(conn_fd...); 
//... 
fp = fopen(path, "r"); 
while ((c = getc(fp)) != EOF) 
    fputc(c, stream); 

如果插座拔掉出于某种原因(以太网线unpluged),将fputc函数功能块调用进程?流缓冲区会发生什么?
如果fputc函数阻塞,我可以设置SO_SNDTIMEO来解决问题吗?

非常感谢!

回答

2

在连接终止时,所有读/写功能都将返回一个错误(只有在读入输入缓冲区后才开始读取失败)。如果您想确定为什么不能读取/写入更多数据,请检查errno。

+0

注意,尽管可能无法及时检测到连接终止 - 如果是这样,一旦发送缓冲区填满,fputc()函数就会阻塞。 – caf 2011-03-14 02:34:34

+0

的确如此,并且默认的TCP超时时间很长。但是这种情况只会发生在网络故障时 - 当TCP终止包不能发送,数据包完全没有回应时。 – Basilevs 2011-03-14 02:38:11

+0

其实默认情况下程序会得到一个SIGPIPE信号并被终止而不是看到一个错误。 – mark4o 2011-03-14 06:25:39