Bläddra i källkod

IPv4: Non-blocking IPv4 sockets should return -EAGAIN in recvfrom()

...if there are no packets in the receive queue.
Andreas Kling 5 år sedan
förälder
incheckning
ecd23ce1a1
1 ändrade filer med 3 tillägg och 0 borttagningar
  1. 3 0
      Kernel/Net/IPv4Socket.cpp

+ 3 - 0
Kernel/Net/IPv4Socket.cpp

@@ -222,6 +222,9 @@ ssize_t IPv4Socket::recvfrom(FileDescription& description, void* buffer, size_t
     ReceivedPacket packet;
     ReceivedPacket packet;
     {
     {
         LOCKER(lock());
         LOCKER(lock());
+        if (m_receive_queue.is_empty() && !description.is_blocking())
+            return -EAGAIN;
+
         if (!m_receive_queue.is_empty()) {
         if (!m_receive_queue.is_empty()) {
             packet = m_receive_queue.take_first();
             packet = m_receive_queue.take_first();
             m_can_read = !m_receive_queue.is_empty();
             m_can_read = !m_receive_queue.is_empty();