理解 listen 的第二个参数
对于服务器, listen 的第二个参数设置为 2, 并且不调用 accept
test_server.cc
- #include "tcp_socket.hpp"
- int main(int argc, char* argv[]) {
- if (argc != 3) {
- printf("Usage ./test_server [ip] [port]\n");
- return 1;
- }
- TcpSocket sock;
- bool ret = sock.Bind(argv[1], atoi(argv[2]));
- if (!ret) {
- return 1;
- }
- ret = sock.Listen(2);
- if (!ret) {
- return 1;
- }
- // 客户端不进行 accept
- while (1) {
- sleep(1);
- }
- return 0; }
- #include "tcp_socket.hpp"
- int main(int argc, char* argv[]) {
- if (argc != 3) {
- printf("Usage ./test_client [ip] [port]\n");
- return 1;
- }
- TcpSocket sock;
- bool ret = sock.Connect(argv[1], atoi(argv[2]));
- if (ret) {
- printf("connect ok\n");
- } else {
- printf("connect failed\n");
- }
- while (1) {
- sleep(1);
- }
- return 0; }
- tcp 3 0 0.0.0.0:9090 0.0.0.0:* LISTEN
- 9084/./test_server
- tcp 0 0 127.0.0.1:9090 127.0.0.1:48178 SYN_RECV -
-
- tcp 0 0 127.0.0.1:9090 127.0.0.1:48176 ESTABLISHED -
-
- tcp 0 0 127.0.0.1:48178 127.0.0.1:9090 ESTABLISHED
- 9140/./test_client
- tcp 0 0 127.0.0.1:48174 127.0.0.1:9090 ESTABLISHED
- 9087/./test_client
- tcp 0 0 127.0.0.1:48176 127.0.0.1:9090 ESTABLISHED
- 9088/./test_client
- tcp 0 0 127.0.0.1:48172 127.0.0.1:9090 ESTABLISHED
- 9086/./test_client
- tcp 0 0 127.0.0.1:9090 127.0.0.1:48174 ESTABLISHED -
-
- tcp 0 0 127.0.0.1:9090 127.0.0.1:48172 ESTABLISHED -
这是因为, Linux内核协议栈为一个tcp连接管理使用两个队列
