我正在编写一个带有网络服务器的iPhone应用程序。为了处理Web请求,我接受Web请求并将()向其写入我想要发回的数据。
当我尝试下载中等大小的文件(3-6MB)时,它工作正常,但如果我中途取消下载,应用程序崩溃并且不会留下任何错误。我认为文件描述符在写入中途变得无效,并导致崩溃。我真的不知道这是不是导致崩溃的原因,我只是假设。
我的网络服务器基于this示例。
NSString *header = @"";
NSData *data = [NSData dataWithContentsOfFile:fullPath];
write (fd, [header UTF8String], [header length]);
write(fd, [data bytes], [data length]);
close(fd);
有谁知道如何解决这个问题?我正在考虑对数据进行分块然后编写每个部分,但我认为它不会有所帮助。
答案 0 :(得分:2)
听起来您的应用程序可能因为尝试写入损坏的套接字而收到信号SIGPIPE
。您需要使用以下内容忽略代码中的SIGPIPE
信号:
#include <signal.h>
signal (SIGPIPE, SIG_IGN);
我建议您在main()
功能的顶部执行此操作。
此外,您可能最好使用NSInputStream
/ NSOutputStream
或其核心基金会对应人员CFReadStream
/ CFWriteStream
,因为他们可以使用循环以允许异步操作。