C++ 如何检查libwebsockets服务器端口是否已被占用?
我遇到一个问题,两个libwebsockets服务器实例试图使用同一端口。第一个实例运行正常,但第二个实例在尝试执行libwebsocket\u create\u context(..)时崩溃: 是否有办法检查所需端口是否已被占用C++ 如何检查libwebsockets服务器端口是否已被占用?,c++,c,websocket,C++,C,Websocket,我遇到一个问题,两个libwebsockets服务器实例试图使用同一端口。第一个实例运行正常,但第二个实例在尝试执行libwebsocket\u create\u context(..)时崩溃: 是否有办法检查所需端口是否已被占用 try{}catch(..){}无法捕获崩溃。如果所需端口已在使用,则libwebsocket\u create\u context应该返回NULL。如果您没有遇到这种情况,请尝试通过libwebsocket\u context\u destroy@simonc进行调
try{}catch(..){}无法捕获崩溃。如果所需端口已在使用,则
libwebsocket\u create\u context
应该返回NULL
。如果您没有遇到这种情况,请尝试通过libwebsocket\u context\u destroy
@simonc进行调试。我编译了一个调试库,发现当一个libwebsocket端口已打开时,该库在close(sockfd)
函数上失败,代码为:If(n<0){lwsl\u err(“绑定到端口%d(%d%d)时出错)\n,info->port,n,errno);close(sockfd);goto bail;}
。显然,它无法关闭另一个libwebsocket实例的端口。我不知道注释close(…)
函数是否是一个好主意,但这已经解决了问题。我想我应该向@warmcatt提出这个问题。这听起来像是libwebsocket中的一个bug。如果您有时间,最好将问题的描述(以及建议的修复)发布到他们的Yup中,事实证明这确实是一个bug。新版本解决了这个问题。
struct lws_context_creation_info info;
memset(&info, 0, sizeof(info));
info.port = 9000;
info.protocols = protocols;
info.extensions = libwebsocket_get_internal_extensions();
info.gid = -1;
info.uid = -1;
struct libwebsocket_context *context;
context = libwebsocket_create_context(&info);