【问题标题】:select and accept value, ftp creation选择并接受值,创建 ftp
【发布时间】:2013-07-28 00:08:00
【问题描述】:
  while (1)
    {
      FD_ZERO(&readfs);
      readfs = add_clients_to_readfs(list_fd);
      select(get_max_fd(list_fd) + 1, &readfs, NULL, NULL, NULL);

      if (FD_ISSET(fd_socket, &readfs))
        {
          if (fd_client = (xaccept(fd_socket, (struct sockaddr *)s_in_client, &s_in_size)) != -1)
            {
              printf("FD_CLIENT %i\n", fd_client);
              add_client_to_list(list_fd, fd_client);
            }
        }

我在循环开始时有 FD_ZERO,一个函数 add_clients_to_readfs 使用我列表中的文件描述符重新启动 readfds fd_set,这是一个经典选择。在循环之前,我在列表中推送了选择 fd,如果 FD_ISSET 做出反应,则它是一个新的客户端连接,所以我接受客户端并将他的 fd 添加到列表中。但是我在 printf 中的 fd_client 总是 1。你知道吗?

【问题讨论】:

    标签: sockets


    【解决方案1】:

    运算符优先级问题。

    if (fd_client = (xaccept(fd_socket, (struct sockaddr *)s_in_client, &s_in_size)) != -1)
    

    应该是

    if ((fd_client = xaccept(fd_socket, (struct sockaddr *)s_in_client, &s_in_size)) != -1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多