我正在写一个有网络服务器的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);
有人知道怎么解决这个问题吗?我想先把数据分块,然后再写下每一部分,但我认为这没什么用。
听起来您的应用程序可能正在接收信号 SIGPIPE 由于试图写入断开的套接字。你需要忽略 硅管 在代码中使用类似以下的信号:
SIGPIPE
硅管
#include <signal.h> signal (SIGPIPE, SIG_IGN);
我建议你在你的 main() 功能。
main()
另外,你最好使用 NSInputStream / NSOutputStream 或者他们的核心基金会, CFReadStream / CFWriteStream ,因为可以使它们使用运行循环来允许异步操作。
NSInputStream
NSOutputStream
CFReadStream
CFWriteStream