Re: recv list
From: Wolfgang <hidden>
Date: 2012-01-09 10:46:37
Hi,
now it is saying 'sendto failed: Machine is not on the network', when I am
sending a message with id 0x15FFD000
#include <sys/ioctl.h>
#include <net/if.h>
#include <string.h>
#include <linux/can/j1939.h>
#include <linux/can.h>
#include <unistd.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/types.h>
int main (void)
{
int s;
s = socket(PF_CAN, SOCK_DGRAM, CAN_J1939);
struct sockaddr_can addr;
memset(&addr, 0, sizeof(addr));
addr.can_ifindex = if_nametoindex("can0");
addr.can_addr.j1939.name = J1939_NO_NAME;
addr.can_addr.j1939.addr = 0x00;
addr.can_addr.j1939.pgn = J1939_NO_PGN;
addr.can_family = AF_CAN;
if (bind(s, (void *)&addr, sizeof(addr))<0)
perror ("bind failed");
else
printf("bind of s1 on can0 successful\n");
int s2;
s2 = socket(PF_CAN, SOCK_DGRAM, CAN_J1939);
struct sockaddr_can addr2;
memset(&addr2, 0, sizeof(addr2));
addr2.can_ifindex = if_nametoindex("can1");
addr2.can_addr.j1939.name = J1939_NO_NAME;
addr2.can_addr.j1939.addr = 0x3d;
addr2.can_addr.j1939.pgn = J1939_NO_PGN;
addr2.can_family = AF_CAN;
if (bind(s2, (void *)&addr2, sizeof(addr2))<0)
perror ("bind2 failed");
else
printf("bind of s2 on can1 successful\n");
int ret;
socklen_t len;
struct sockaddr_can src_addr;
char buf[128];
while (1) {
len = sizeof(src_addr);
ret = recvfrom(s, buf, sizeof(buf), 0, (void *)&src_addr, &len);
if (ret < 0)
perror ("recvfrom failed");
src_addr.can_addr.j1939.addr = J1939_NO_ADDR;
if (sendto(s2, buf, ret, 0, (void *)&src_addr, len) < 0)
perror("sendto failed");
}
return 0;
}