sendto не работает на VxWorks

Я задавал этот вопрос раньше и не имел решения (проблема все еще существует). Я в тупике, потому что функция вернулась без ошибок и НИКАКИХ ДАННЫХ не было отправлено! Этот код работает на Linux... версия VxWorks не работает (sendto не отправляет, хотя возвращает без ERROR).

Синопсис - я пишу простой эхо-сервер - сервер успешно получает данные (из коробки x86) и утверждает, что успешно ОТПРАВИЛ их обратно. Однако НИКАКИЕ ДАННЫЕ не получены на клиенте (netcat на x86). Этот код работает на VxWorks 5.4 на коробке PowerPC...

  • Я как-то буферизирую данные UDP?

  • Может ли другая задача препятствовать отправке sendto? (НЕ для того, чтобы уйти от погони за дикими гусями, но я создаю задачи для своего приложения с нормальным приоритетом, то есть ниже критических задач, таких как сетевая задача и т. д. и т. д. ... так что это нормально).

  • Может ли VxWorks буферизовать мои данные UDP?

  • Я НАСТРОЙИЛ свою таблицу маршрутизации... пинг работает!

  • Брандмауэра, на мой взгляд, НЕТ...

  • В чем нюансы sendto и что бы мои данные не попали к клиенту...

    while(1)
    {
    readlen = recvfrom(sock, buf, BUFLEN, 0, (struct sockaddr *) &client_address, &slen);

    if (readlen == ERROR)
    {
        printf("RECVFROM FAILED()/n");
        return (ERROR);
    }

    printf("Received %d bytes FROM %s:%d\nData: %s\n\n",
           readlen, inet_ntoa(client_address.sin_addr),
    ntohs(client_address.sin_port), buf);

    // Send it to right back to the client using the open UDP socket
    // but send it to OUTPORT
    client_address.sin_port = htons(OUTPORT);

    // Remember slen is a value (not an address ... in, NOT in-out)
    sendlen = sendto(sock, buf, BUFLEN, 0, (struct sockaddr*)&client_address, slen);

    // more code ....
   }

person Xofo    schedule 16.10.2010    source источник
comment
Все еще борюсь с этим ... убедился, что я обнулил client_address при запуске ... это странно ...   -  person Xofo    schedule 16.10.2010
comment
Почему вы отправляете на другой порт?   -  person Nikolai Fetissov    schedule 16.10.2010
comment
Не должно быть ничего плохого в отправке на другой порт...   -  person Xofo    schedule 16.10.2010
comment
После еще некоторого возни я начинаю подозревать брандмауэр ... netcat из другого Linux Box (в интересующей подсети) не может получить доступ к Linux Box за пределами подсети ... брандмауэр или шлюз может это делать?   -  person Xofo    schedule 17.10.2010
comment
Нет, ничего страшного, просто интересно.   -  person Nikolai Fetissov    schedule 17.10.2010
comment
Различные порты необходимы для выполнения некоторых сантехнических задач... inport outport   -  person Xofo    schedule 17.10.2010


Ответы (1)


Я надеюсь, что ERROR определяется как -1, верно? Затем проверяете ли вы возвращаемое значение sendto(2)< /а> позвонить? А как насчет значения errno(3)?

Одна очевидная проблема, которую я вижу в коде, заключается в том, что вы указываете BUFLEN в качестве длины отправляемого сообщения, тогда как на самом деле оно должно быть readlen - количество полученных вами байтов.

person Nikolai Fetissov    schedule 19.10.2010