int TcpSocket::Listen()

in platform/common/network/tcp_socket.cpp [97:134]


int TcpSocket::Listen(const std::string& ip, int port) {
  int on = 1;
  if (setsockopt(socket_fd_, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0) {
    LOG(ERROR) << "set TcpSocket opt fail, error" << strerror(errno);
    return -1;
  }

  struct sockaddr_in servaddr;
  memset(&servaddr, 0, sizeof(servaddr));
  servaddr.sin_family = AF_INET;
  servaddr.sin_addr.s_addr = inet_addr(ip.data());
  servaddr.sin_port = htons(port);

  if (bind(socket_fd_, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1) {
    LOG(ERROR) << "bind TcpSocket error: " << strerror(errno)
               << "(errno: " << errno << ")";
    return -1;
  }

  if (listen(socket_fd_, 10) == -1) {
    LOG(ERROR) << "listen TcpSocket error: " << strerror(errno)
               << "(errno: " << errno << ")";
    return -1;
  }
  if (port == 0) {
    struct sockaddr_in localaddr;
    socklen_t len = sizeof(localaddr);
    int ret = getsockname(socket_fd_, (struct sockaddr*)&localaddr, &len);
    if (ret != 0) {
      LOG(ERROR) << "get binding port fail:" << strerror(errno);
    } else {
      binding_port_ = ntohs(localaddr.sin_port);
    }
  } else {
    binding_port_ = port;
  }
  return 0;
}