最近使用websocket++这个库来与网页保持长连接通信,这个库的底层使用的是boost库中的asio来进行socket通信。我在windows上编译之后可以正常监听端口,通信也正常,但是编译成linux版本,在centos 版本2.6.32-696.10.1.el6.x86_64上运行,端口监听时会报asio listen error: system:97 (Address family not supported by protocol)这个错误,看字面意思就是不支持这个协议族。在网上找了,看到一个大神的帖子,说这个是因为websocket++库在使用boost asio进行网络通信时,默认使用的是IPV6协议族,在某些机器上还不支持IPV6。
解决问题的关键就是在端口监听的时候指定使用IPV4版本。代码如下
// Listen port
g_server.listen(websocketpp::lib::asio::ip::tcp::v4(), uPort);
websoket 中listen函数有多个重载,如果调用只传监听端口的那个重载函数,默认就是使用IPV6版本。这个有点小坑,希望能帮到遇到相同问题的同学
参考文章:https://blog.youkuaiyun.com/wangdamingll/article/details/53412325