Лишние пакеты?
От: Limper  
Дата: 27.06.05 11:25
Оценка:
Есть код следующего содержания, который перенаправляет данные с UDP порта на TCP на другой машине
int CUdp2Tcp::ConvertData()
{
    char Buffer[1024];
    //Ïîëó÷èëè ñîîáùåíèå SQL
    int ret = recv(s_UDP,Buffer,sizeof(Buffer),0);
    if (ret == SOCKET_ERROR)
    {
        ret = WSAGetLastError();
        SendMessage(DebugEdit.GetHandle(),LB_ADDSTRING,0,(LPARAM)"Îøèáêà ôóíêöèè recv() !!!");
        return ret;
    }
    ret = send(s_Inbound,Buffer,sizeof(Buffer),0);
    if (ret == SOCKET_ERROR)
        ret = WSAGetLastError();
    else 
    {
                // первый счетчик
        PacketsNum++;
    }
          
    if (ret)
    {
        switch (ret)
        {
        //Socket operation on non-socket. 
        case WSAENOTSOCK:
            return 0;
            break;
        //reset by peer
        case WSAECONNRESET:
            closesocket(s_Inbound); //Ïîñëå ýòîãî îïåðàöèè ñ ñîêåòîì áóäåò âûçûâàòüñÿ WSAENOTSOCK
            ClosedConnection();
            break;
        default:
            char* CfgLine = new char[1024];
            if (GetCfgData("Errors",CfgLine))
            {
                if (IsOn(CfgLine))
                {
                    char chrret[16];
                    itoa(ret,chrret,10);
                    SendMessage(DebugEdit.GetHandle(),LB_ADDSTRING,0,(LPARAM)chrret);
                }
            }
                        delete [] CfgLine;
            break;
        }
    }
    return ret;
}


Второй счетчик стоит в программе-клииенте, который вызывается по FD_READ.
Вопрос следующий: почему между ними есть расхождения? Клиент получает на каждую тысячу счетчика в сервере еще дополнительно где-то 70 пакетов. Соответственно, что считает один, а что другой и как этого можно избежать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.