使用WebSocketpp启用了Websocketpp接受连接的问题
Issue with accepting connection using websocketpp with firewall enabled
这个问题是我遇到的前5个最奇怪的事情。所以请忍受我。
我正在使用UFW防火墙运行Arch Linux(截至2017-03-09起最新)。
启用防火墙后,我无法再连接到基于WebSocketpp的应用程序。不,我没有阻止所涉及的端口。
实际上,如果我禁用防火墙,我在重新启动整个计算机之前仍然无法连接(仅重新启动相关的应用程序无济于事)。
,UFW也允许Localhost上的所有流量
我也在WebSocketpp存储库中验证了示例Echo服务器的问题。
检查我的应用程序是否在端口9002
上收听sudo netstat -lnp | grep 900
tcp6 0 0 :::9002 :::* LISTEN 12695/./bin/echo_se
在这里,我们可以看到Echo服务器已绑定到IPv6。但是更改为IPv4无济于事。已经尝试了。
带有DEBUG的Echo服务器的输出
[2017-03-09 11:38:06] [devel] endpoint constructor
[2017-03-09 11:38:06] [devel] server constructor
[2017-03-09 11:38:06] [devel] asio::init_asio
[2017-03-09 11:38:06] [devel] set_message_handler
[2017-03-09 11:38:06] [devel] asio::listen
[2017-03-09 11:38:06] [devel] create_connection
[2017-03-09 11:38:06] [devel] asio con transport constructor
[2017-03-09 11:38:06] [devel] connection constructor
[2017-03-09 11:38:06] [devel] transport::asio::init
[2017-03-09 11:38:06] [devel] asio::async_accept
我正在使用telnet尝试连接(因为此时我只关心TCP握手
telnet localhost 9002
Trying ::1...
(eventually timeout)
,如果我关闭了Echo服务器,因此没有任何应用程序再收听了。然后我得到(预期的)
telnet localhost 9002
Trying ::1...
Connection failed: Connection refused
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
所以,现在的操作系统通知没有人在收听并发送连接被拒绝。
和UWF规则:
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22 ALLOW Anywhere
7000:8000/udp ALLOW Anywhere
7000:8000/tcp ALLOW Anywhere
9000:9500/tcp ALLOW Anywhere
9002 ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
7000:8000/tcp (v6) ALLOW Anywhere (v6)
9000:9500/tcp (v6) ALLOW Anywhere (v6)
9002 (v6) ALLOW Anywhere (v6)
我还应该提到其他服务器。例如,我在同一端口上尝试过的最小Boost ASIO Telnet服务器,基于ZMQ的服务器等。
所以,我认为这一定是WebSocketpp的东西,但我不明白它可能是什么。由于TCP握手在应用级别以下执行。
,这是不可能的。目前对任何想法都表示赞赏。
完整性。禁用UFW并重新启动后,我会从Echo服务器中获得此信息:
2017-03-09 11:49:17] [devel] endpoint constructor
[2017-03-09 11:49:17] [devel] server constructor
[2017-03-09 11:49:17] [devel] asio::init_asio
[2017-03-09 11:49:17] [devel] set_message_handler
[2017-03-09 11:49:17] [devel] asio::listen
[2017-03-09 11:49:17] [devel] create_connection
[2017-03-09 11:49:17] [devel] asio con transport constructor
[2017-03-09 11:49:17] [devel] connection constructor
[2017-03-09 11:49:17] [devel] transport::asio::init
[2017-03-09 11:49:17] [devel] asio::async_accept
[2017-03-09 11:49:23] [devel] asio::handle_accept
[2017-03-09 11:49:23] [devel] connection start
[2017-03-09 11:49:23] [devel] asio connection init
[2017-03-09 11:49:23] [devel] asio connection handle pre_init
[2017-03-09 11:49:23] [devel] asio connection post_init
[2017-03-09 11:49:23] [devel] asio connection handle_post_init
[2017-03-09 11:49:23] [devel] connection handle_transport_init
[2017-03-09 11:49:23] [devel] connection read_handshake
[2017-03-09 11:49:23] [devel] asio async_read_at_least: 1
[2017-03-09 11:49:23] [devel] create_connection
[2017-03-09 11:49:23] [devel] asio con transport constructor
[2017-03-09 11:49:23] [devel] connection constructor
[2017-03-09 11:49:23] [devel] transport::asio::init
[2017-03-09 11:49:23] [devel] asio::async_accept
[2017-03-09 11:49:23] [devel] asio post init timer cancelled
telnet中的此:
telnet localhost 9002
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
所以一切都起作用。
和"在sudo ufw启用& sudo ufw disable之后"它不再起作用...
好,在调试两天后(我写了问题,然后今天)我找到了它。
这是侦听()调用OS的积压参数为0。
为什么加载iptables的行为是不同的,对我来说是个谜。
这篇文章表明,即使设置为0时,积压也应该是最小的16个,也许(这是我猜测)iptables加载了内核不再填写积压参数,而0使其"不起作用"。我能理解的是,由于0的队列没有道理。
无论如何。将积压设置为64解决了我的问题。
websocketPpServerObject.set_listen_backlog(64);
也请参见此GitHub线程,如果您对更多详细信息感兴趣。
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- 无线局域网连接问题
- C++ Qt SQL lite 数据库连接问题
- 尝试创建表面网格,但遇到连接问题
- 闲置期后的redis pubsub连接问题
- 过滤器连接问题
- Zeromq EPGM连接问题
- 提升 SSL 连接时出现连接问题
- poll()套接字编程tcp-linux多连接问题
- 使用 FFMPEG 库到 UDP 流 mpeg2 ts 视频延迟/初始连接问题
- 线程连接问题
- Android NDK套接字连接问题
- TeamSpeak 3 SDK连接问题
- C++套接字连接问题
- 通过无线互联网连接保持长期持续的套接字连接问题Windows
- QSqlTableModel数据库连接问题
- c++服务器连接问题
- winsock - recv -网络连接问题
- 彭博 API 连接问题 - <本地主机:8194> 连接失败
- 服务器和客户端套接字连接问题重新。send(), accept() 和多线程