【发布时间】:2020-07-30 19:56:00
【问题描述】:
我正在尝试从套接字读取数据,并且大部分时间都可以正常工作。
当我运行应用程序更长的时间时 - 应用程序崩溃和 crashlytics 将崩溃指向 readingSocket() - 这个函数只是从套接字读取原始数据。
下面是readingSocket()的代码
-(bool) readingSocket:(NSMutableData*)dataIn readBytes:(ssize_t)quantity error:(NSError **)error {
ssize_t readBytesNow = 0;
ssize_t grossRead= 0;
[dataIn setLength:0];
if (error != nil) {
*error = nil;
}
char *buffer = new char[6144];
do {
ssize_t readBytes = (quantity - grossRead);
readBytesNow = recv((int)raw_Socket, buffer, readBytes , MSG_DONTWAIT);
if (readBytesNow == 0) {
NSLog(@" read error");
delete[] buffer;
return false;
}
Else if (bytesRead < 0) {
if (errno == EAGAIN) {
[NSThread sleepForTimeInterval:0.5f];
NSLog(@" EAGAIN error");
continue;
}
else {
// if error != nil
delete[] buffer;
return false;
}
}
else if (readBytesNow > 0) {
grossRead += readBytesNow;
// doing some operations
}
} while (grossRead < quantity);
delete[] buffer;
return true;
}
阅读后我已经做了很多检查,但不确定导致崩溃或异常的可能原因在哪里??
还有其他更好的方法来处理我上面的代码中的异常吗?
【问题讨论】:
标签: ios sockets exception crash recv