Войти
ПрограммированиеФорумСеть

потеря пакетов

#0
13:27, 9 апр. 2010

на комп присылаются UDP пакеты, на порт хххх на компе запущено 2+ приложения ловящие эти пакеты, сокеты инициализированы с параметром SO_REUSEADDR, при этом пакеты ловятся только одним из приложений.
Если я делаю записать лога пакетов своим инструментом и потом им же рассылаю, то оба приложения видят сообщения.
Я рассылаю брудкастом сообщения через sendto

sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
saddr.sin_port = htons(xxxx);   
sendto(m_hSocket, lpMsg, nSize, 0, (sockaddr*)&saddr, sizeof(sockaddr));

приложение оригинал которое рассылает неизвестно как шлёт, но шлёт оно на определённые IP.

в чем может быть причина?


#1
17:11, 9 апр. 2010

а что вернула setsockopt для  SO_REUSEADDR ? Может флаг не установился ?
Лучше б конечно же увидеть код создания m_hSocket....

#2
17:43, 9 апр. 2010


bool CreateSocket()
{
  .....
  bool bBroadcast = true;
  if(SOCKET_ERROR == setsockopt(m_hSocket, SOL_SOCKET, SO_REUSEADDR,
    (char*)&bBroadcast, sizeof(BOOL)))
  {
    closesocket(m_hSocket);
    return false;
  }
  else
  {
    sockaddr_in saddr;
    saddr.sin_family = AF_INET;
    saddr.sin_addr.s_addr = htonl(INADDR_ANY);
    saddr.sin_port = htons(port_xxxx);

    if(SOCKET_ERROR == bind(m_hSocket, (sockaddr*)&saddr, sizeof(sockaddr)))
    {
      return false;   
    }
    ......

    return true;
  }
}

вот как то так, функция возвращает true, т.е сокет биндится, да и если б не биндился от приложения не получали б сообщения от других источников на этот порт.

#3
11:59, 12 апр. 2010

netstat -al что показывает при запущенных нескольких программах ?

ПрограммированиеФорумСеть

Тема в архиве.