我有一个小的守护进程的应用程序,它侦听特定的端口,所以碰巧不同的应用程序使用相同的端口,不知何故将它从我的应用程序中拿走。
开始之前,其他应用程序一切正常,一旦我启动它,我不再得到一个连接,但closures它,但守护进程继续工作。 我不知道有可能使用一个端口,而另一个应用程序正在监听它,并希望如果可能的话,防止发生这种情况。
有趣的是,当干扰应用程序已经在运行的时候,当我重新启动守护进程时,甚至没有例外,它可以创build,绑定和监听端口,它根本不工作,因为它应该。
这里是主循环代码:
Linux内核中的TCP调用stream程
为什么不能Nginx POST到我的Perl后端?
Linux中的C ++ UDP Socket编程
Socket.io + NodeJS + Nginx + SSL
if __name__ == '__main__': print "Daemon PID:",os.getpid() server = socket.socket(family=socket.AF_INET,type=socket.soCK_STREAM) server.bind(('localhost',local_port)) server.listen(10) print "Server listening on:",server.getsockname() while True: thread.start_new_thread(handle_client,server.accept())
( local_port和handle_client是事先定义的,应该是无关紧要的,系统是Debian GNU / Linux 7,Python版本是2.7.3)
其他信息请求:
运行守护进程:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 25422/python
运行守护进程和VLC
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 25422/python tcp6 0 0 :::9000 :::* LISTEN 25447/vlc tcp6 0 0 ::1:9000 ::1:46156 ESTABLISHED 25447/vlc tcp6 0 0 ::1:46157 ::1:9000 ESTABLISHED - tcp6 0 0 ::1:46156 ::1:9000 ESTABLISHED - tcp6 0 0 ::1:9000 ::1:46157 ESTABLISHED 25447/vlc
所以这个问题似乎在同时运行TCP和TCP6。 还注意到,如果我第一次启动VLC,然后尝试运行我的守护进程,我得到了预期的错误,因为在这种情况下,VLC也抓住了TCP套接字。
发送数据客户端服务器的最佳方法
Linux,了解setsockopt()PACKET_FANOUTnetworking缩放
如何列出绑定的Linux套接字,如果他们不听
使用TCP套接字(WIN32 API)创build的两个窗口之间的通信
所以你的守护进程仍然运行在IPv4上,而VLC运行在IPv6上。 如果尝试连接到它的应用程序只尝试IPv4,它将连接到守护程序; 我猜测这个应用程序首先尝试使用IPv6,并且只使用IPv4作为后备。 你可以用AF_INET6和'ip6-localhost'打开一个IPv6端口,而不是在守护进程中的IPv4端口(或者除此之外)来修复你的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。