sendto не работает на VxWorks - PullRequest
       16

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

0 голосов
/ 16 октября 2010

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

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

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

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

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

  • У меня есть таблица маршрутизации ... pinging работает!

  • БЕЗОПАСНОСТИ НЕ БУДЕТ AFAIK ...

  • Каковы нюансы 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 ....
   }

1 Ответ

1 голос
/ 19 октября 2010

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

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

...