All,
please find the code snippets below. I try to set up some real-time
network tests. If I send the buffer contents to 10.0.0.255 (broadcast)
using rt_dev_sendto, everything works fine and I get the bytes sent. As
soon as I try to send the packets to a specific receiver (let's say
10.0.0.20) rt_dev_sendto returns -113.
This is all UDP, so the problem can't be "connection" related...
Anyone seen this before?
TIA::Bernhard
[main...]
/* Create the UDP socket */
if (((sock = rt_dev_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))) == -1) {
printf("Error opening UDP/IP socket: %d\n", sock);
exit(1);
}
/* Enable broadcast on this socket */
int broadcast = 1;
if (rt_dev_setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcast,
sizeof(broadcast)) == -1) {
printf("Can't set broadcast options\n");
rt_dev_close(sock);
exit(1);
}
/* Local IP configuration */
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(PORT);
local_addr.sin_addr.s_addr = INADDR_ANY;
/* Remote IP settings */
transmit_addr.sin_family = AF_INET;
transmit_addr.sin_port = htons(PORT);
transmit_addr.sin_addr.s_addr = inet_addr("10.0.0.20");
//memset(transmit_addr.sin_zero, '\0', sizeof(transmit_addr.sin_zero));
/* Configure and bind the socket */
if (rt_dev_bind(sock, (struct sockaddr *) &local_addr, sizeof(struct
sockaddr_in)) == -1) {
rt_printk("Can't configure the network socket");
rt_dev_close(sock);
exit(1);
}
[...]
/** The sender task */
static void *sender(void *arg)
{
/* Initialise the sender thread */
if (!(Sender_Task = rt_thread_init(nam2num("TXTSK"), 0, 0, SCHED_FIFO,
CPUMAP))) {
printf("Cannot initialise the sender task\n");
exit(1);
}
rt_printk("FuCSnet: Transmitter task initialised\n");
/* We need max determinism */
rt_make_hard_real_time();
/* Protect the next section */
rt_sem_wait_barrier(barrier);
/* Start delay */
RTIME start = rt_get_time() + nano2count(200000000);
/* Now run the show */
if (0 != rt_task_make_periodic(Sender_Task, start,
nano2count(WORKCYCLE))) {
printf("Make periodic failed\n");
exit(1);
}
/* The sender loop */
while(!end) {
/* Store the current timestamp */
sprintf(buffer_out, "%ld", (long) rt_get_time_ns());
/* Brodcast the current timestamp */
slen = rt_dev_sendto(sock, buffer_out, strlen(buffer_out), 0,
(struct
sockaddr*)&transmit_addr, sizeof(transmit_addr));
printf("sent %d bytes to %s\n", slen,
inet_ntoa(transmit_addr.sin_addr));
/* Wait until the next cycle is due */
rt_task_wait_period();
}
/* Cleanup */
rt_sem_wait_barrier(barrier);
rt_make_soft_real_time();
rt_thread_delete(Sender_Task);
return 0;
}
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
RTnet-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rtnet-users