我是靠谱客的博主 幽默饼干,最近开发中收集的这篇文章主要介绍socket 子进程bind端口占用问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

发现一个socket参数可以在子进程运行的时候可以不继承父进程(FORK)的句柄,父进程退出、子进程未退出的情况下,可以在下次父进程重新运行时,再次bind的时候不会失败。

/* close server socket on exec so cgi's can't write to it*/
if (fcntl(server_s, F_SETFD, 1) == -1)
{
    msprintf("can't set close-on-exec on server socket!");
}

之前遇到的NVR RTSP重启会提示554端口占用可以用这种解决办法
(554端口占用问题,通过killall所有子进程的方式,避免了该问题)

// 和fcntl(server_s, F_SETFD, 1)等效,但这是标准写法,即用 FD_CLOEXEC 取代直接写1
int tFlags = fcntl(fd, F_GETFD);
fcntl(fd, F_SETFD, tFlags | FD_CLOEXEC);


msfs的disk之前也有这个问题,在open的时候加上O_CLOEXEC标志。

以后创建句柄的时候可以设置一下这个值,这样子进程才不会有太多从父进程继承的句柄,减少系统开销。

最后

以上就是幽默饼干为你收集整理的socket 子进程bind端口占用问题的全部内容,希望文章能够帮你解决socket 子进程bind端口占用问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部