]> git.sesse.net Git - vlc/commitdiff
- Fix error reporting in net_Read* (refs #1056)
authorRémi Denis-Courmont <rem@videolan.org>
Thu, 15 Feb 2007 17:12:28 +0000 (17:12 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Thu, 15 Feb 2007 17:12:28 +0000 (17:12 +0000)
- Suppress broken and unused timeout value from net_ReadNonBlock()

modules/stream_out/switcher.c
src/network/io.c
src/stream_output/sap.c

index 229824c2e375020c30f2c362e1b45ec08cacaff6..bbdffcea0cd9da3d49505e93908b026b5ab601b6 100644 (file)
@@ -651,7 +651,7 @@ static void NetCommand( sout_stream_t *p_stream )
     sout_stream_sys_t *p_sys = p_stream->p_sys;
     char psz_buffer[11];
     int i_len = net_ReadNonBlock( p_stream, p_sys->i_fd, NULL, (uint8_t *)&psz_buffer[0],
-                                  sizeof( psz_buffer ) - 1, 0 );
+                                  sizeof( psz_buffer ) - 1 );
 
     if ( i_len > 0 )
     {
index a35fd3cb8c0151caaace13c8d7b5eba4dded9e6a..b9a564d0f12c692aa4a229f5741ad815f19e340a 100644 (file)
@@ -359,26 +359,30 @@ net_ReadInner( vlc_object_t *restrict p_this, unsigned fdc, const int *fdv,
                  * with the first part of the datagram. */
                     msg_Err( p_this, "Receive error: "
                                      "Increase the mtu size (--mtu option)" );
-                    i_total += i_buflen;
-                    return i_total;
+                    n = i_buflen;
+                    break;
+
+                default:
+                    goto error;
             }
 #else
             if( errno == EAGAIN ) /* spurious wake-up (sucks if fdc > 1) */
                 continue;
-#endif
             goto error;
+#endif
         }
 
         if (n == 0) // EOF
-            return i_total;
+            break;
 
         i_total += n;
         p_buf += n;
         i_buflen -= n;
 
         if (!waitall)
-            return i_total;
+            break;
 
+        /* FIXME: This is broken. Do not us this. */
         if (wait_ms != -1)
         {
             wait_ms -= delay_ms;
@@ -389,8 +393,7 @@ net_ReadInner( vlc_object_t *restrict p_this, unsigned fdc, const int *fdv,
     return i_total;
 
 error:
-    if( errno != EINTR )
-        msg_Err( p_this, "Read error: %s", net_strerror (net_errno) );
+    msg_Err( p_this, "Read error: %s", net_strerror (net_errno) );
     return i_total ? (ssize_t)i_total : -1;
 }
 
@@ -400,30 +403,32 @@ error:
  *****************************************************************************
  * Read from a network socket
  * If b_retry is true, then we repeat until we have read the right amount of
- * data
+ * data; in that case, a short count means EOF has been reached.
  *****************************************************************************/
 ssize_t __net_Read( vlc_object_t *restrict p_this, int fd,
                     const v_socket_t *restrict p_vs,
                     uint8_t *restrict buf, size_t len, vlc_bool_t b_retry )
 {
     return net_ReadInner( p_this, 1, &(int){ fd },
-                          &(const v_socket_t *){ p_vs }, buf, len, -1,
-                          b_retry );
+                          &(const v_socket_t *){ p_vs },
+                          buf, len, -1, b_retry );
 }
 
 
 /*****************************************************************************
  * __net_ReadNonBlock:
  *****************************************************************************
- * Read from a network socket, non blocking mode (with timeout)
+ * Read from a network socket, non blocking mode.
+ * This function should only be used after a poll() (or select(), but you
+ * should use poll instead of select()) invocation to avoid busy loops.
  *****************************************************************************/
 ssize_t __net_ReadNonBlock( vlc_object_t *restrict p_this, int fd,
                             const v_socket_t *restrict p_vs,
-                            uint8_t *restrict buf, size_t len, mtime_t i_wait)
+                            uint8_t *restrict buf, size_t len )
 {
     return net_ReadInner (p_this, 1, &(int){ fd },
                           &(const v_socket_t *){ p_vs },
-                          buf, len, i_wait / 1000, VLC_FALSE);
+                          buf, len, 0, VLC_FALSE);
 }
 
 
@@ -432,6 +437,7 @@ ssize_t __net_ReadNonBlock( vlc_object_t *restrict p_this, int fd,
  *****************************************************************************
  * Read from several sockets (with timeout). Takes data from the first socket
  * that has some.
+ * NOTE: DO NOT USE this API with a non-zero delay. You were warned.
  *****************************************************************************/
 ssize_t __net_Select( vlc_object_t *restrict p_this,
                       const int *restrict fds, int nfd,
index 606fbec3afaa07daf86163677578ab1be003079e..c872bb628e722e9a6ed1fb0881ca2cc4d61eeb88 100644 (file)
@@ -653,7 +653,7 @@ static int CalculateRate( sap_handler_t *p_sap, sap_address_t *p_address )
     {
         /* Might be too slow if we have huge data */
         i_read = net_ReadNonBlock( p_sap, p_address->i_rfd, NULL, buffer,
-                                   SAP_MAX_BUFFER, 0 );
+                                   SAP_MAX_BUFFER );
         i_tot += i_read;
     } while( i_read > 0 );