Longobard
написал 25 апреля 2004 года в 16:59 (970 просмотров)
Ведет себя
как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.
Помогите!
Есть класс connection
#ifndef CONNECTION_H #define CONNECTION_H #include "autoheader.h" using std::string; /* Класс connection для обработки подключений. В него включены дескрипторы сокета и ip клиента. Реализация в connection.cpp */ struct traffic_count { long double input; long double output; char in_type; char out_type; }; class connection { private: int connfd; string client_ip; struct traffic_count traf; bool count_in_traf; bool count_out_traf; public: connection( int cofd, const char* IP, bool count_in = false, bool count_out = false); ~connection(); void f_write(void * ptr, size_t nbytes ); ssize_t f_read(void * ptr, size_t nbytes); struct traffic_count GetTraffic (void) const; string GetClientIP (void); }; #define TT_BYTE 0x1 #define TT_KBYTE 0x2 #define TT_MBYTE 0x3 #define TT_GBYTE 0x4 #define TT_TBYTE 0x5 #endif
#include "autoheader.h" #include "unp.h" #include "connection.h" #include void connection::f_write( void * ptr, size_t nbytes ) { if ( write( connfd, ptr, nbytes ) != ( ssize_t )nbytes ) err_msg( "Write error!" ); if ( count_out_traf ) { traf.output += ( long int ) nbytes; if ( traf.output > ( 1024 * pow ( traf.output, traf.out_type ) ) && traf.out_type <= 0x5 ) { traf.out_type++; traf.out_type /= 1024; } } } ssize_t connection::f_read( void * ptr, size_t nbytes ) { ssize_t n; if ( ( n = read( connfd, ptr, nbytes ) ) == -1 ) err_sys( "Read error" ); if ( count_in_traf ) { traf.input += ( long int ) n; if ( traf.input > ( 1024 * pow ( traf.input, traf.in_type ) ) && traf.in_type <= 0x5 ) { traf.in_type++; traf.input /= 1024; } } return n ; } connection::connection( int fd , const char * IP, bool count_in , bool count_out ) { string client_ip = IP; count_in_traf = count_in; count_out_traf = count_out; connfd = fd; client_ip.erase ( client_ip.rfind( "." ), client_ip.length() ); err_msg( "Connection from %s", client_ip.c_str() ); if ( count_in_traf || count_out_traf ) memset ( & traf, 0, sizeof ( traf ) ); } connection::~connection ( void ) { Close ( connfd ); } string connection::GetClientIP ( void ) const { return client_ip; }
char buffer[512]; connection client (connfd,IP); ssize_t readed = client.f_read (&buffer, sizeof (buffer)); buffer[readed] = '\0'; http_request request ( buffer ); string ip = client.GetClientIP(); err_msg ("at 36 in servr_main.cpp client ip = %s",ip.c_str());
Здесь функция err_msg пишет в лог. В результате в лог пишется IP из конструктора (пишется без проблем), а из main`a в лог пишется пустая строка. То есть в логе такая ситуция:
IP:
в чем дело? Почему client_ip в конструкторе инициализирован, а функция GetClientIP возвращает пустую строку?!!!??!! Надуеюсь на вашу квалифицированную помощь. Заранее сенькс.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Нашел. Ошибка тупей некуда :)
меняем на
И все работает :) Короче тред можно закрывать :)