sout_stream_t *p_stream;
/* rtp field */
- uint32_t i_timestamp_start;
uint16_t i_sequence;
uint8_t i_payload_type;
uint8_t ssrc[4];
id->p_stream = p_stream;
- id->i_timestamp_start = rand()&0xffffffff;
id->i_sequence = rand()&0xffff;
id->i_payload_type = p_sys->i_payload_type;
id->ssrc[0] = rand()&0xff;
mwait( i_date );
vlc_mutex_lock( &id->lock_sink );
-#if 0
unsigned deadc = 0; /* How many dead sockets? */
int deadv[id->sinkc]; /* Dead sockets list */
-#endif
for( int i = 0; i < id->sinkc; i++ )
{
if( splice( fd[2], NULL, id->sinkv[i].rtp_fd, NULL, len,
SPLICE_F_NONBLOCK ) >= 0 )
continue;
+ if( errno == EAGAIN )
+ continue;
/* splice failed */
splice( fd[2], NULL, fd[4], NULL, len, 0 );
+#else
+ if( send( id->sinkv[i].rtp_fd, out->p_buffer, len, 0 ) >= 0 )
+ continue;
#endif
- if( send( id->sinkv[i].rtp_fd, out->p_buffer, len, 0 ) < 0 )
- /*deadv[deadc++] = id->sinkv[i].rtp_fd*/;
+ /* Retry sending to root out soft-errors */
+ if( send( id->sinkv[i].rtp_fd, out->p_buffer, len, 0 ) >= 0 )
+ continue;
+
+ deadv[deadc++] = id->sinkv[i].rtp_fd;
}
vlc_mutex_unlock( &id->lock_sink );
splice( fd[0], NULL, fd[4], NULL, len, 0 );
#endif
-#if 0
for( unsigned i = 0; i < deadc; i++ )
{
msg_Dbg( id, "removing socket %d", deadv[i] );
rtp_del_sink( id, deadv[i] );
}
-#endif
/* Hopefully we won't overflow the SO_MAXCONN accept queue */
while( id->listen_fd != NULL )