(一)BUG
经过群里的技术大佬们不懈努力,终于查出minihttp的bug出自tcp socket的意外断链,导致mjpeg的通信管道出问题。那么就需要对这种异常情况处理。
(二)超时处理
1-send超时返回
通过控制台printf排查,查出出bug时,是在【server_thread】线程里面调用send_mjpeg()函数时,卡在了send_to_client中的send这一socket发送函数内。
解决方法:
server_thread主循环开头加入超时处理协议:
SocketTimeoutChange(client_fd, 0,900);
函数定义:
void SocketTimeoutChange(int client_fd, int sec, int msec)
{
struct timeval timeout = {sec, msec};
int ret = setsockopt(client_fd, SOL_SOCKET, SO_SNDTIMEO, (const char *)&timeout, sizeof(timeout));
}
2-超时之后关闭socket,修改send_to_client函数
int send_to_client(int i, char* buf, ssize_t size) {;
if (send_to_fd(client_fds[i].socket_fd, buf, size) < 0)
{
free_client(i);
return -1;