使用过spice-gtk进行远程连接虚拟机的朋友应该都知道,正在连接虚拟机的过程中,如果网络断开,虚拟机窗口界面就会卡死,也不会给出任何提示信息,那么下面我们来实现spice-gtk网络超时后自动退出。
首先找到spice-channel.c这个是spice-gtk的核心网络层,找到setsockopt函数所在位置加入:
int keepAlive = 1; // 设定 KeepAlive
int keepIdle = 3; // 开始首次 KeepAlive 探测前的 TCP 空闭时间
int keepInterval = 3; // 两次 KeepAlive 探测间的时间间隔
int keepCount = 1; // 判定断开前的 KeepAlive 探测次数
setsockopt(g_socket_get_fd(c->sock), SOL_SOCKET, SO_KEEPALIVE, (void*)&keepAlive, sizeof(keepAlive));
setsockopt(g_socket_get_fd(c->sock), SOL_TCP, TCP_KEEPIDLE, (void *)&keepIdle, sizeof(keepIdle));
setsockopt(g_socket_get_fd(c->sock), SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(g_socket_get_fd(c->sock), SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCou