@@ -20,7 +20,8 @@ TCPTransport::TCPTransport(const char *ip_address, int port)
2020 client_sockfd_(-1 ),
2121 server_portnum_(port),
2222 running_(true ),
23- server_address_(new char [strlen(ip_address) + 1]) {
23+ server_address_(new char [strlen(ip_address) + 1]),
24+ source_port_(-1 ) {
2425 strncpy (server_address_, ip_address, strlen (ip_address) + 1 );
2526}
2627
@@ -38,6 +39,7 @@ TCPTransport::~TCPTransport() {
3839int TCPTransport::Init () {
3940 struct sockaddr_in serv_addr = {};
4041 int reuseaddr = 1 ;
42+ source_address_[0 ] = ' \0 ' ;
4143
4244 sockfd_ = socket (AF_INET, SOCK_STREAM, 0 );
4345
@@ -73,11 +75,16 @@ int TCPTransport::Init() {
7375
7476void TCPTransport::Start () {
7577 acceptThread_ = std::thread ([this ]() {
78+ struct sockaddr_in client_addr;
79+ socklen_t client_add_size = sizeof (client_addr);
80+
7681 while (running_) {
7782 std::cout << " Waiting for connection..." << ' \n ' ;
78- client_sockfd_ = accept (sockfd_, nullptr , nullptr );
83+ client_sockfd_ = accept (sockfd_, reinterpret_cast <sockaddr*>(&client_addr), &client_add_size );
7984 if (client_sockfd_ >= 0 ) {
80- std::cout << " Client connected." << ' \n ' ;
85+ inet_ntop (AF_INET, &client_addr.sin_addr , source_address_, INET_ADDRSTRLEN);
86+ source_port_ = static_cast <int >(ntohs (client_addr.sin_port ));
87+ // std::cout << "Client connected " << source_address_ << ":" << ntohs(client_addr.sin_port) << '\n';
8188 while (true ) { // Use true instead of 1
8289 std::uint8_t buffer[kBufferSize ];
8390 const ssize_t kBytesReceived = recv (client_sockfd_, buffer, sizeof (buffer), 0 );
@@ -105,6 +112,10 @@ bool TCPTransport::Send(const std::vector<std::uint8_t> &data) {
105112
106113bool TCPTransport::Receive (std::vector<std::uint8_t > &data) { return messageQueue_.Pop (data, kTimeoutMs ); }
107114
115+ std::string TCPTransport::GetSourceIp () { return std::string (source_address_); }
116+
117+ int TCPTransport::GetSourcePort () { return source_port_; }
118+
108119void TCPTransport::Destroy () {
109120 running_ = false ;
110121 shutdown (sockfd_, SHUT_RDWR);
0 commit comments