[rtmpdump] SIGINT ignored when no A/V data received

Skaarj NaPali skaarj1 at gmail.com
Sun Aug 22 13:02:09 CEST 2010


Rtmpdump can not get exited with "Ctrl+C" in case the server does not
send any audio/video data and instead of this keeps sending only
control data. There are scenarios where a server may not send any
audio/video (e.g. bad server configuration, bad playpath, etc.) In hat
case the server will though keep sending RTMP control data which leads
to that there will never be a socket timeout error and rtmpdump keeps
running. The problem here is that this instance of rtmpdump can not
get exited by "Ctrl+C" even because the "RTMP_ctrlC" flag is not
evaluated at all.

To solve this problem the according check could get added to
"RTMPSockBuf_Fill" as shown below:

int
RTMPSockBuf_Fill(RTMPSockBuf *sb)
{
    int nBytes;

    if (!sb->sb_size)
        sb->sb_start = sb->sb_buf;

    while (1)
    {
        nBytes = sizeof(sb->sb_buf) - sb->sb_size - (sb->sb_start - sb->sb_buf);
#if defined(CRYPTO) && !defined(NO_SSL)
        if (sb->sb_ssl)
        {
            nBytes = TLS_read(sb->sb_ssl, sb->sb_start + sb->sb_size, nBytes);
        }
        else
#endif
        {
            nBytes = recv(sb->sb_socket, sb->sb_start + sb->sb_size, nBytes, 0);
        }
//Need to check 'Ctrl-C' here as well.
        if (RTMP_ctrlC) {
            nBytes = -1;
            SetSockError(0);
        }
        if (nBytes != -1)
...


More information about the rtmpdump mailing list