答案 0 :(得分:3)
根据塔图·隆德(Tatu Lund)的回答,我们制作了自己的版本,并通过Vaadin 14.1.23进行了测试
-(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;
}
像魅力一样工作。
答案 1 :(得分:2)
此feature尚未包含在Vaadin 14框架中,但实际上已经实现,即将发布到下一个次要版本,即14.2
与此同时,可以像我在a workaround using Template renderer组件中那样使用FileSelect。