编译运行GoAhead嵌入式C固件出现80端口绑定报错的问题咨询
GoAhead 绑定80端口报错及相关疑问解答
报错本质
errno 13对应Linux类系统的权限不足错误,和端口占用、虚拟机端口转发没有直接关系。
Linux规定1024以下的端口属于特权端口,只有root用户/拥有cap_net_bind_service权限的进程才能绑定,普通用户直接启动GoAhead绑定80端口必然触发该错误。
对应疑问逐一解答
- 是否需要配置虚拟机80端口转发?
不需要。端口转发是虚拟机内服务成功启动后,要从宿主机访问虚拟机内服务时才需要配置的项,当前服务本身无法启动,和端口转发无关。 - 是否是80端口被其他进程占用?
大概率不是。端口被占用时的报错errno为98(Address already in use),不是13。可以用命令额外确认状态:lsof -i:80或netstat -tulpn | grep :80,无输出即代表端口未被占用。 - 更换端口的具体设置方法?
两种方案二选一即可:- 临时测试用:直接用root权限运行,执行
sudo ./goahead即可正常绑定80端口。 - 长期使用推荐:更换为1024以上的非特权端口,支持两种生效方式:
- 临时生效:启动时直接指定参数,执行
./goahead --port=8080即可绑定8080端口。 - 永久生效:修改你复制的route.txt配置文件,把默认监听的
:80配置项改为:8080这类高位端口,保存后启动会自动加载新配置。
- 临时生效:启动时直接指定参数,执行
- 临时测试用:直接用root权限运行,执行
goahead-test无输出说明
默认编译生成的goahead-test二进制如果没有传入测试参数、或者编译时未开启内置测试输出开关,运行后不会主动打印内容,属于正常现象。等主服务启动后,可以执行./goahead-test --url=http://127.0.0.1:你配置的端口运行测试用例,验证服务可用性。
内容的提问来源于stack exchange,提问作者v00d00
相关产品推荐
相关产品推荐

