markparticle / WebServer

C++ Linux WebServer服务器
Apache License 2.0
3.49k stars 730 forks source link

重复开启服务器失败。日志显示端口被占用 #110

Closed Tsubaki-01 closed 2 months ago

Tsubaki-01 commented 3 months ago

ubuntu 16.04下该项目和ubuntu 22.04下本人学习的项目都遇到这个问题,查询资料后发现这个函数是有正确设置成了SOREUSEADDR setsockopt(listenFd, SOL_SOCKET, SO_REUSEADDR, (const void*)&optval, sizeof(int)); 但是问题并没有解决,下面是出错的日志和终端图片 QQ截图20240613162414 QQ截图20240613162756

liginity commented 2 months ago

根据你的截图来判断,你通过 Ctrl-Z 来停止了 server 进程。但是 Ctrl-Z 是“停止”进程(向进程发送 SIGSTOP 信号),而不是“关闭”进程。被停止的进程应该还是占用着相应的端口,所以你再次开启一个 server 进程时,会显示端口被占用。

在 ubuntu 22.04 上,可以使用 iproute2 软件包提供的 ss 命令来列出 tcp socket 的信息。

ss -tnl
# sudo ss -tnlp
Tsubaki-01 commented 2 months ago

根据你的截图来判断,你通过 Ctrl-Z 来停止了 server 进程。但是 Ctrl-Z 是“停止”进程(向进程发送 SIGSTOP 信号),而不是“关闭”进程。被停止的进程应该还是占用着相应的端口,所以你再次开启一个 server 进程时,会显示端口被占用。

在 ubuntu 22.04 上,可以使用 iproute2 软件包提供的 ss 命令来列出 tcp socket 的信息。

ss -tnl
# sudo ss -tnlp

是的了🤣 使用ctl+c是直接终止进程,ctl+z是挂起进程。 谢谢你