C sendto работает иногда ... просто останавливается через некоторое время ... НЕТ ОШИБОК - PullRequest
0 голосов
/ 10 марта 2011

Я получаю странные результаты с функцией sendto в C. (LINUX) Я пытаюсь реализовать надежную схему UDP-типа.

Фрагмент приведенного ниже кода является частьютаймер, который истекает, когда пакет отбрасывается, и отправляет сообщение процессу для повторной передачи этого пакета.

Странная проблема, с которой я сталкиваюсь, заключается в том, что при передаче большого файла говорят ...> 300 КБ.ниже работает идеально (то есть, ИСПОЛЬЗУЕТСЯ ЧАСТЬ ЧАСТИ). Но после того, как определенное количество пакетов отправлено ..., он выполняет часть затем.НО С 251 ПАКЕТОМ kabooom !!!

 n =  sendto(sockfd, &(forwardPeer->id), sizeof(forwardPeer->id), 0, (struct sockaddr*)&tcpd_addr, sizeof(tcpd_addr));
 if(n<0)
    printf("\n error sending to tcpdc");
 else 
    printf("\n message sent to tcpdc");     

ПОЖАЛУЙСТА, ПОМОГИТЕ !!!!Заранее спасибо

1 Ответ

1 голос
/ 11 марта 2011

Ошибка Bad file descriptor означает, что переданное значение sockfd неверно. Или:

  • Дескриптор файла был закрыт; или
  • Значение этой переменной было перезаписано мусором, возможно, из-за переполнения границ где-то в вашей программе.

Чтобы поймать второй случай, запустите программу в отладчике и установите точку наблюдения для переменной sockfd - она ​​будет взламываться в отладчике при каждом изменении значения, что должно позволить вам увидеть, где оно изменяется, когда оно не должно т.

Вы также можете попробовать запустить программу под valgrind и исправить все проблемы, о которых она сообщает.

...