Я пишу веб-сервер для приложения для обмена музыкой ... когда у меня большой файл (например, mp3), это не работает.Вылетает по коду ошибки SIGPIPE.Заголовок, который я отправляю, имеет «Connection: close» - но я предполагал, что это подождет до завершения загрузки, чтобы закрыть соединение.Я знаю, что это, вероятно, должно быть разветвлено в поток, но для тестирования я хочу, чтобы он работал синхронно.
NSData *fileData =[NSData dataWithContentsOfFile:filePath];
CFHTTPMessageRef response =
CFHTTPMessageCreateResponse(
kCFAllocatorDefault, 200, NULL, kCFHTTPVersion1_1);
CFHTTPMessageSetHeaderFieldValue(
response, (CFStringRef)@"Content-Type", (CFStringRef)@"audio/mpeg");
CFHTTPMessageSetHeaderFieldValue(
response, (CFStringRef)@"Connection", (CFStringRef)@"close");
CFHTTPMessageSetHeaderFieldValue(
response,
(CFStringRef)@"Content-Length",
(CFStringRef)[NSString stringWithFormat:@"%ld", [fileData length]]);
CFDataRef headerData = CFHTTPMessageCopySerializedMessage(response);
@try
{
[fileHandle writeData:(NSData *)headerData];
[fileHandle writeData:fileData];
}@catch (NSException *exception)
{
// Ignore the exception, it normally just means the client
// closed the connection from the other end.
}