我正在尝试为客户端动态分配端口号,因此我在连接类中实现了以下方法:
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()
函数将返回错误)。因此,我要问你:
bind()
函数的正常行为吗? 0
分配给clieParams.sin_port
是解决此问题的唯一可用方法吗?