代码之家  ›  专栏  ›  技术社区  ›  Some Name

在backlog=0的情况下,客户机为什么不拒绝连接?

  •  1
  • Some Name  · 技术社区  · 7 年前

    我在玩Linux域套接字,现在我谈到了关于理解backlog的问题。以下是服务器端代码:

    const char *const hostname = "/tmp/test_local_addr";
    
    int sock_fd = socket(AF_LOCAL, SOCK_STREAM, 0);
    
    struct sockaddr_un server_address;
    memset(&server_address, '\0', sizeof(struct sockaddr_un));
    server_address.sun_family = AF_LOCAL;
    strncpy(server_address.sun_path, hostname, hostname_len + 1);
    const socklen_t addrlen = offsetof(struct sockaddr_un, sun_path) + hostname_len + 1;
    
    bind(sock_fd, (struct sockaddr*) &server_address, addrlen);
    
    int listen_result = listen(sock_fd, 0);
    

    我将待办事项的大小设置为 0 在听的时候不要打电话 accept connect . 但当我跑的时候 strace nc -U /tmp/test_local_addr 从两个不同的终端我有第一个打印

    connect(3, {sa_family=AF_UNIX, sun_path="/tmp/test_local_addr"}, 110) = 0
    poll([{fd=0, events=POLLIN}, {fd=3, events=0}, {fd=3, events=POLLIN}, {fd=1, events=0}], 4, -1
    

    第二个呢

    --- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} ---
    connect(3, {sa_family=AF_UNIX, sun_path="/tmp/test_local_addr"}, 110
    

    我不太清楚这种行为。我以为他们两个都会立即终止 Connection refused

    read(-1, 0x7fffc0db3740, 16384)         = -1 EBADF (Bad file descriptor)
    

    只有在我终止服务器时才会在两个客户端中发生。

    0 回复  |  直到 7 年前
    推荐文章