在一系列值中动态分配端口号

时间:2019-02-02 02:03:39

标签: c++ sockets port

我正在尝试为客户端动态分配端口号,因此我在连接类中实现了以下方法:

void TCPConnection::bindSocket() {
  short result;
  clieParams.sin_family = AF_INET;
  for (unsigned short port = MIN_PORT_NUMBER; port < MAX_PORT_NUMBER; port++) {
    clieParams.sin_port = htons(port);
    result = bind(socketFD, (const struct sockaddr*) &clieParams, sizeof clieParams);
    printf("%i\t", result);
    if (!(result < 0)) {
#ifdef DEBUG
      std::cout << "[DEBUG] Socket bound with port " << port << "..." << std::endl;
#endif
      break;
    }
  }
  if (result < 0) {
    throw TCPConnectionException("Socket bind failed.");
  }

在不同的进程上启动该类,尽管已将套接字分配给其他进程并由其他进程使用,但上述方法始终将套接字绑定在同一端口上(在另一个方法内部调用的connect()函数将返回错误)。因此,我要问你:

  1. 这是bind()函数的正常行为吗?
  2. 如果是,则发生这种情况,因为套接字仅与进程相关(换句话说,每个进程都有自己的套接字),而端口与网络接口相关?
  3. 如果是,如何动态分配范围内的端口值而又不与其他进程产生冲突?
  4. 0分配给clieParams.sin_port是解决此问题的唯一可用方法吗?

0 个答案:

没有答案