diff --git a/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp b/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp index 1a6c6216d8..8e34bdc87b 100644 --- a/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp +++ b/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp @@ -278,7 +278,7 @@ ethernet_send_data(net_device *_device, net_buffer *buffer) device->stats.send.errors++; if (allocated) gBufferModule->free(allocated); - return bytesWritten; + return errno; } device->stats.send.packets++; @@ -323,7 +323,7 @@ ethernet_receive_data(net_device *_device, net_buffer **_buffer) bytesRead = read(device->fd, data, device->frame_size); if (bytesRead < 0) { device->stats.receive.errors++; - status = bytesRead; + status = errno; goto err; } //dump_block((const char *)data, bytesRead, "rcv: "); diff --git a/src/add-ons/kernel/network/stack/device_interfaces.cpp b/src/add-ons/kernel/network/stack/device_interfaces.cpp index c1f30f9482..174e703ecf 100644 --- a/src/add-ons/kernel/network/stack/device_interfaces.cpp +++ b/src/add-ons/kernel/network/stack/device_interfaces.cpp @@ -66,6 +66,8 @@ device_reader_thread(void* _interface) } fifo_enqueue_buffer(&interface->receive_queue, buffer); + } else if (status == B_DEVICE_NOT_FOUND) { + device_removed(device); } else { // In case of error, give the other threads some // time to run since this is a high priority time thread.