Я задавал этот вопрос раньше и не имел решения (проблема все еще существует). Я в тупике, потому что функция вернулась без ошибок и НИКАКИХ ДАННЫХ не было отправлено! Этот код работает на 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 ....
}