accept не принимает коннект
От: WhiteDove  
Дата: 14.12.11 16:09
Оценка:
клиент-серверная система.

Клиент шлет пакеты на соединение, сервер делает listen и accept.
Соединение с сервером не наступает никогда.

Сниффер показывает, что на машину, на которой установлен сервер, приходят пакеты от клиента.
Но цикл accept'а никогда не проваливается внутрь.

Биндиться пробовал как на ноль, так и на конкретный адрес. пофигу. accept'а нет.

Код сервера:
(жирным выделен код, на котором висяк)

        if( ( m_Socket = ::socket( AF_INET, SOCK_STREAM, 0 ) ) < 0 )
        {
            int err = WSAGetLastError();
            LOG_ERROR( L"socket() return %d", err);
            return stt::error;
        }
226:        LOG_LINE();
        sockaddr_in local_addr;
        local_addr.sin_family = AF_INET;
        local_addr.sin_port = htons( m_Port );
        std::string tempstr;
        local_addr.sin_addr.s_addr = inet_addr((tempstr = std::string(m_Host.begin(), m_Host.end())).c_str());

        if( ::bind( m_Socket, (sockaddr *)&local_addr, sizeof( local_addr ) ) )
        {
            int err = WSAGetLastError();
            LOG_ERROR( L"bind() return %d", err);
            ::shutdown(m_Socket, SD_BOTH);
            ::closesocket( m_Socket );
            return stt::error;
        }
241:        LOG_LINE();
        if( ::listen( m_Socket, 0x100 ) )
        {
            int err = WSAGetLastError();
            LOG_ERROR( L"listen() return %d", err);
            ::shutdown(m_Socket, SD_BOTH);
            ::closesocket( m_Socket );
            return stt::error;
        }
250:        LOG_LINE();
        typ::socket client_socket;
        sockaddr_in client_addr;

        int client_addr_size = sizeof( client_addr );

        while( INVALID_SOCKET != ( client_socket = accept( m_Socket, (sockaddr*)&client_addr, &client_addr_size ) ) )
        {
258:            LOG_LINE();
            LOG_NOTE(L"Main server cycle, WSAGetLastError trace: %d", WSAGetLastError());
            typ::hostent* hst = ::gethostbyaddr( (char*)&client_addr.sin_addr.s_addr, 4, AF_INET );

            //printf("+%s [%s] new connect!\n", (hst)?hst->h_name:"", inet_ntoa(client_addr.sin_addr));

            // SPS : 22.04.2011
            // Почему-то на Windows 7 x64 inet_ntoa возвращала имя компа, а не его IP в виде "X.X.X.X"
            // Переделал получение строки с IP-адресом через sprintf.
            char ip_addr_buff[32];
            memset(ip_addr_buff, 0, sizeof(ip_addr_buff));
            sprintf(ip_addr_buff, "%d.%d.%d.%d", client_addr.sin_addr.S_un.S_un_b.s_b1,
                                                client_addr.sin_addr.S_un.S_un_b.s_b2,
                                                client_addr.sin_addr.S_un.S_un_b.s_b3,
                                                client_addr.sin_addr.S_un.S_un_b.s_b4);
            // Создаем новый объект агента
            LOG_CONSOLE(CONS_COLOR_GREEN, "=> New agent %s\n", ip_addr_buff);
            //
            srv::Agent* agent = new srv::Agent( this, client_socket, ip_addr_buff, htons( client_addr.sin_port ) );
            if( !agent )
                continue;

            // Добавляем агента в список агентов
            {
                LOCK(m_Guard);
                m_ListAgents.push_back( agent );
            }

            // Запускаем агента
            agent->Start();
        }
        LOG_ERROR(L"Main server cycle crashed with WSAGetLastError: %d", WSAGetLastError());
    }
    catch (...)
    {
        LOG_CONSOLE(CONS_COLOR_RED, "ERROR: Exception in main server thread!\n");
294:        LOG_LINE();
        LOG_ERROR(L"Exception in main server thread!!!");
    }
297:    LOG_LINE();
    return stt::ok;



номера строк вбил вручную, функция LOG_LINE выводит их в лог. Содержимое лога:


[14.12.2011 19:35:07.201]  [00000A70]  .\pro.server.cpp  (226)  .\pro.server.cpp (226) - program::Server::ThreadProc
[14.12.2011 19:35:07.201]  [00000A70]  .\pro.server.cpp  (241)  .\pro.server.cpp (241) - program::Server::ThreadProc
[14.12.2011 19:35:07.201]  [00000A70]  .\pro.server.cpp  (250)  .\pro.server.cpp (250) - program::Server::ThreadProc
EOF


при этом wireshark говорить, что пара сотен пакетов бесконечного цикла соединения с клиента на сервер пришла. и именно на порт, на который происходит бинд.

что не так?
Re: accept не принимает коннект
От: savitar  
Дата: 14.12.11 16:21
Оценка:
Здравствуйте, WhiteDove, Вы писали:

1. покажи m_Host
2. обнуляй local_addr
3. правильно ::socket( PF_INET, к данной проблеме это отношения не имеет, но..
Re[2]: accept не принимает коннект
От: Аноним  
Дата: 15.12.11 05:52
Оценка:
S>3. правильно ::socket( PF_INET, к данной проблеме это отношения не имеет, но..

Это по-моему из разряда использования shell/will для будущего времени в англ. языке ))) — только закоренелый олдфаг напишет PF_UNIX или PF_INET )).
Re[3]: accept не принимает коннект
От: savitar  
Дата: 15.12.11 06:25
Оценка:
Здравствуйте, Аноним, Вы писали:


S>>3. правильно ::socket( PF_INET, к данной проблеме это отношения не имеет, но..


А>Это по-моему из разряда использования shell/will для будущего времени в англ. языке ))) — только закоренелый олдфаг напишет PF_UNIX или PF_INET )).


для будущего времени в английском языке используют will, а shall (если вы это имели ввиду) уже не используют.
Re[2]: accept не принимает коннект
От: WhiteDove  
Дата: 15.12.11 09:11
Оценка:
Здравствуйте, savitar, Вы писали:

S>Здравствуйте, WhiteDove, Вы писали:


S>1. покажи m_Host

S>2. обнуляй local_addr
S>3. правильно ::socket( PF_INET, к данной проблеме это отношения не имеет, но..

1) Содержимое лога клиента.

[15.12.2011 13:06:47.213]  [00000704]  => CreateConnectionToServer
[15.12.2011 13:06:47.213]  [00000704]  .\network.cpp  (567)  ServerIp - „192.168.129.39”, ServerPort - 5567
[15.12.2011 13:06:47.213]  [00000704]  .\network.cpp  (581)  .\network.cpp (581) - CreateConnectionToServer
[15.12.2011 13:06:47.213]  [00000704]  .\network.cpp  (591)  .\network.cpp (591) - CreateConnectionToServer
[15.12.2011 13:07:08.242]  [00000704]  .\network.cpp  (600)  Неудалось создать соединение с сервером ( 192.168.129.39:5567 WSAGetLastError код: 10060 )
[15.12.2011 13:07:08.242]  [00000704]  .\network.cpp  (210)  Закрытие сетевого соединения
[15.12.2011 13:07:08.242]  [00000704]  <= CreateConnectionToServer
[15.12.2011 13:07:09.256]  [00000704]  => CreateConnectionToServer
[15.12.2011 13:07:09.256]  [00000704]  .\network.cpp  (567)  ServerIp - „192.168.129.39”, ServerPort - 5567
[15.12.2011 13:07:09.256]  [00000704]  .\network.cpp  (581)  .\network.cpp (581) - CreateConnectionToServer
[15.12.2011 13:07:09.256]  [00000704]  .\network.cpp  (591)  .\network.cpp (591) - CreateConnectionToServer
[15.12.2011 13:07:30.285]  [00000704]  .\network.cpp  (600)  Неудалось создать соединение с сервером ( 192.168.129.39:5567 WSAGetLastError код: 10060 )
[15.12.2011 13:07:30.285]  [00000704]  .\network.cpp  (210)  Закрытие сетевого соединения
[15.12.2011 13:07:30.285]  [00000704]  <= CreateConnectionToServer


На сервере
        LOG_CONSOLE(CONS_COLOR_RED, tempstr.c_str());
        LOG_CONSOLE(CONS_COLOR_RED, "\nm_Port: %d\n", m_Port);

сразу после бинда из предыдущего кода выдал
192.168.129.39
m_Port: 5567

2) ZeroMemory сделал, без эффекта
3) сча попробуем (shall/will — главное чтоб работало)
Re[3]: accept не принимает коннект
От: WhiteDove  
Дата: 15.12.11 09:27
Оценка:
Здравствуйте, WhiteDove, Вы писали:

WD>Здравствуйте, savitar, Вы писали:


S>>Здравствуйте, WhiteDove, Вы писали:


S>>1. покажи m_Host

S>>2. обнуляй local_addr
S>>3. правильно ::socket( PF_INET, к данной проблеме это отношения не имеет, но..

WD>1) Содержимое лога клиента.


WD>
WD>[15.12.2011 13:06:47.213]  [00000704]  => CreateConnectionToServer
WD>[15.12.2011 13:06:47.213]  [00000704]  .\network.cpp  (567)  ServerIp - „192.168.129.39”, ServerPort - 5567
WD>[15.12.2011 13:06:47.213]  [00000704]  .\network.cpp  (581)  .\network.cpp (581) - CreateConnectionToServer
WD>[15.12.2011 13:06:47.213]  [00000704]  .\network.cpp  (591)  .\network.cpp (591) - CreateConnectionToServer
WD>[15.12.2011 13:07:08.242]  [00000704]  .\network.cpp  (600)  Неудалось создать соединение с сервером ( 192.168.129.39:5567 WSAGetLastError код: 10060 )
WD>[15.12.2011 13:07:08.242]  [00000704]  .\network.cpp  (210)  Закрытие сетевого соединения
WD>[15.12.2011 13:07:08.242]  [00000704]  <= CreateConnectionToServer
WD>[15.12.2011 13:07:09.256]  [00000704]  => CreateConnectionToServer
WD>[15.12.2011 13:07:09.256]  [00000704]  .\network.cpp  (567)  ServerIp - „192.168.129.39”, ServerPort - 5567
WD>[15.12.2011 13:07:09.256]  [00000704]  .\network.cpp  (581)  .\network.cpp (581) - CreateConnectionToServer
WD>[15.12.2011 13:07:09.256]  [00000704]  .\network.cpp  (591)  .\network.cpp (591) - CreateConnectionToServer
WD>[15.12.2011 13:07:30.285]  [00000704]  .\network.cpp  (600)  Неудалось создать соединение с сервером ( 192.168.129.39:5567 WSAGetLastError код: 10060 )
WD>[15.12.2011 13:07:30.285]  [00000704]  .\network.cpp  (210)  Закрытие сетевого соединения
WD>[15.12.2011 13:07:30.285]  [00000704]  <= CreateConnectionToServer
WD>


WD>На сервере

WD>
WD>        LOG_CONSOLE(CONS_COLOR_RED, tempstr.c_str());
WD>        LOG_CONSOLE(CONS_COLOR_RED, "\nm_Port: %d\n", m_Port);
WD>

WD>сразу после бинда из предыдущего кода выдал
WD>192.168.129.39
WD>m_Port: 5567

WD>2) ZeroMemory сделал, без эффекта

WD>3) сча попробуем (shall/will — главное чтоб работало)

3) WinSock2.h, line 468:
#define PF_INET AF_INET
4) netstat показывает вполне себе


C:\Users\admin>netstat -a

Активные подключения

  Имя    Локальный адрес        Внешний адрес          Состояние
  TCP    0.0.0.0:135            m-portnoy-virt:0       LISTENING
...
  TCP    192.168.129.39:5567    m-portnoy-virt:0       LISTENING

Re[4]: accept не принимает коннект
От: WhiteDove  
Дата: 15.12.11 09:33
Оценка:
Здравствуйте, WhiteDove, Вы писали:

WD>Здравствуйте, WhiteDove, Вы писали:


WD>>Здравствуйте, savitar, Вы писали:


S>>>Здравствуйте, WhiteDove, Вы писали:


S>>>1. покажи m_Host

S>>>2. обнуляй local_addr
S>>>3. правильно ::socket( PF_INET, к данной проблеме это отношения не имеет, но..

WD>>1) Содержимое лога клиента.


WD>>
WD>>[15.12.2011 13:06:47.213]  [00000704]  => CreateConnectionToServer
WD>>[15.12.2011 13:06:47.213]  [00000704]  .\network.cpp  (567)  ServerIp - „192.168.129.39”, ServerPort - 5567
WD>>[15.12.2011 13:06:47.213]  [00000704]  .\network.cpp  (581)  .\network.cpp (581) - CreateConnectionToServer
WD>>[15.12.2011 13:06:47.213]  [00000704]  .\network.cpp  (591)  .\network.cpp (591) - CreateConnectionToServer
WD>>[15.12.2011 13:07:08.242]  [00000704]  .\network.cpp  (600)  Неудалось создать соединение с сервером ( 192.168.129.39:5567 WSAGetLastError код: 10060 )
WD>>[15.12.2011 13:07:08.242]  [00000704]  .\network.cpp  (210)  Закрытие сетевого соединения
WD>>[15.12.2011 13:07:08.242]  [00000704]  <= CreateConnectionToServer
WD>>[15.12.2011 13:07:09.256]  [00000704]  => CreateConnectionToServer
WD>>[15.12.2011 13:07:09.256]  [00000704]  .\network.cpp  (567)  ServerIp - „192.168.129.39”, ServerPort - 5567
WD>>[15.12.2011 13:07:09.256]  [00000704]  .\network.cpp  (581)  .\network.cpp (581) - CreateConnectionToServer
WD>>[15.12.2011 13:07:09.256]  [00000704]  .\network.cpp  (591)  .\network.cpp (591) - CreateConnectionToServer
WD>>[15.12.2011 13:07:30.285]  [00000704]  .\network.cpp  (600)  Неудалось создать соединение с сервером ( 192.168.129.39:5567 WSAGetLastError код: 10060 )
WD>>[15.12.2011 13:07:30.285]  [00000704]  .\network.cpp  (210)  Закрытие сетевого соединения
WD>>[15.12.2011 13:07:30.285]  [00000704]  <= CreateConnectionToServer
WD>>


WD>>На сервере

WD>>
WD>>        LOG_CONSOLE(CONS_COLOR_RED, tempstr.c_str());
WD>>        LOG_CONSOLE(CONS_COLOR_RED, "\nm_Port: %d\n", m_Port);
WD>>

WD>>сразу после бинда из предыдущего кода выдал
WD>>192.168.129.39
WD>>m_Port: 5567

WD>>2) ZeroMemory сделал, без эффекта

WD>>3) сча попробуем (shall/will — главное чтоб работало)

WD>3) WinSock2.h, line 468:

WD>#define PF_INET AF_INET
WD>4) netstat показывает вполне себе


WD>
WD>C:\Users\admin>netstat -a

WD>Активные подключения

WD>  Имя    Локальный адрес        Внешний адрес          Состояние
WD>  TCP    0.0.0.0:135            m-portnoy-virt:0       LISTENING
WD>...
WD>  TCP    192.168.129.39:5567    m-portnoy-virt:0       LISTENING
WD>

WD>

Ля. Брандмауэр. вопрос вроде снят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.