read and write changed

This commit is contained in:
keldu 2021-06-05 14:08:32 +02:00
parent d2806e3948
commit ec9db2863b
1 changed files with 22 additions and 4 deletions

View File

@ -31,8 +31,15 @@ UnixIoStream::UnixIoStream(UnixEventPort &event_port, int file_descriptor,
: IFdOwner{event_port, file_descriptor, fd_flags, event_mask | EPOLLRDHUP} {
}
ssize_t UnixIoStream::read(void *buffer, size_t length) {
return unixRead(fd(), buffer, length);
ErrorOr<size_t> UnixIoStream::read(void *buffer, size_t length) {
ssize_t read_bytes = unixRead(fd(), buffer, length);
if( read_bytes > 0 ){
return static_cast<size_t>(read_bytes);
}else if(read_bytes == 0){
return criticalError("Disconnected", static_cast<int8_t>(Error::Type::Disconnected));
}
return recoverableError("Currently busy");
}
Conveyor<void> UnixIoStream::readReady() {
@ -47,8 +54,19 @@ Conveyor<void> UnixIoStream::onReadDisconnected() {
return std::move(caf.conveyor);
}
ssize_t UnixIoStream::write(const void *buffer, size_t length) {
return unixWrite(fd(), buffer, length);
ErrorOr<size_t> UnixIoStream::write(const void *buffer, size_t length) {
ssize_t write_bytes = unixWrite(fd(), buffer, length);
if( write_bytes > 0){
return static_cast<size_t>(write_bytes);
}
int error = errno;
if( error == EAGAIN || error == EWOULDBLOCK ){
return recoverableError("Currently busy");
}
return criticalError("Disconnected", static_cast<int8_t>(Error::Type::Disconnected));
}
Conveyor<void> UnixIoStream::writeReady() {