Mac OSX系统5000端口被莫名占用问题

问题背景

我经常会使用Flask这个轻量级框架快速开发一些简单的服务端App,开发环境使用的操作系统为Mac OSX,由于Flask开发debug模式默认绑定(127.0.0.1:5000),app运行起来后,有时候经常访问不通。这件事有点闹心,但也没有放在心上。

某日在调试golang,golang默认绑定端口8080,偶尔有一次绑定5000,提示端口被占用。经过一番折腾,发现一篇帖子:Why is Control Center on Monterey … | Apple Developer Forums

AirePlay不仅会占用5000端口,也一并占用了7000端口。

╰─➤  netstat -anlt | grep 5000                                                                                                                                1 ↵
tcp6       0      0  *.5000                                        *.*                                           LISTEN     
tcp4       0      0  *.5000                                        *.*                                           LISTEN
╰─➤  netstat -anlt | grep 7000
tcp6       0      0  *.7000                                        *.*                                           LISTEN     
tcp4       0      0  *.7000                                        *.*                                           LISTEN

解决方法

关闭Mac OSX的AirPlay功能,会释放5000和7000两个端口。步骤:系统偏好设置->共享,取消勾选隔空播放接收器。

遗留问题

为啥在AirPlay占用5000端口的前提下,运行Flask app不会提示端口占用?

参考资料

  1. Why is Control Center on Monterey … | Apple Developer Forums