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;
}