【发布时间】:2016-04-15 16:32:41
【问题描述】:
如果网络连接在有线/无线之间切换,我最近修补了我的 GStreamer 0.10.36 副本以使 tcpclientsink 超时(更多信息请访问Method to Cancel/Abort GStreamer tcpclientsink Timeout)。这是一个简单的改变。我刚刚在 gsttcpclientsink.c 的gst_tcp_client_sink_start() 函数中添加了以下内容:
struct timeval timeout;
timeout.tv_sec = 60;
timeout.tv_usec = 0;
...
setsockopt (this->sock_fd.fd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
奇怪的是,实际超时时间(以挂钟时间衡量)总是我设置的值的两倍。如果我在超时设置为 60 秒的情况下中断网络连接,则 GStreamer/socket 将需要 120 秒才能中止。如果我将超时设置为 30 秒,则需要 60 秒。如果我将超时设置为 180 秒,则需要 360 秒。是否有一些我不明白的套接字可能导致这种行为?我真的很想知道这里发生了什么。
【问题讨论】: