最近在调试rtmp推流 用的是srs_librtmp.cpp这个开源库
调试过程中发现 如果正常推流过程中,突然rtmp服务器ping不通的话 会导致 程序卡死在
srs_h264_write_raw_frames 这个函数中 ,跟踪到最后发现是 在这个函数 srs_hijack_io_writev中
卡死在::writev这个函数里面了 一直不返回
但是这个过程中如果rtmp服务器恢复的话,这个函数又可以正常返回了,
后来发现 rmtp库 提供了一个 srs_rtmp_set_timeout 这个函数可以设置超时时间
但是 跟踪下来发现 setsockopt 这个api 返回-1 errorn 为2 百度了一下 错误码2 的意思是 ENOENT(No such file or directory)搞不明白为什么
这样会导致 推流过程中 rtmp服务器突然中断的话 程序 阻塞在那 并且不能正常结束 。
百度了也没发现 合适的解决方案。。。。