c - Linux UDP sendto "Bad address" error in local -
c - Linux UDP sendto "Bad address" error in local -
i trying code udp 2 thread.
first init udp sockets
int fdpipe[2]; //for sockets if ((fdpipe[0] = socket(af_inet, sock_dgram, 0)) < 0) { perror("cannot create socket"); assert(null); } struct sockaddr_in readaddr; memset((char *)&readaddr, 0, sizeof(readaddr)); readaddr.sin_family = af_inet; readaddr.sin_addr.s_addr = htonl(inaddr_any); readaddr.sin_port = htons(10000); if (bind(fdpipe[0], (struct sockaddr *)&readaddr, sizeof(readaddr)) < 0) { perror("bind failed"); assert(null); } if ((fdpipe[1] = socket(af_inet, sock_dgram, 0)) < 0) { perror("cannot create socket"); assert(null); } struct sockaddr_in writeaddr; memset((char *)&writeaddr, 0, sizeof(writeaddr)); writeaddr.sin_family = af_inet; writeaddr.sin_addr.s_addr = htonl(inaddr_any); writeaddr.sin_port = htons(10101); if (bind(fdpipe[1], (struct sockaddr *)&writeaddr, sizeof(writeaddr)) < 0) { perror("bind failed"); assert(null); }
and address sendto()
struct sockaddr_in servaddr; memset((char *)&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = af_inet; int rtnval = inet_pton(af_inet, "127.0.0.1", &servaddr.sin_addr.s_addr); if(rtnval == 0){assert(null);} servaddr.sin_port = htons(10000); servaddr.sin_family = af_inet;
and run thread communicate each other.
but when phone call sentto servaddr
fdpipe[1]
fdpipe[0]
, bad address error appear. event when check address , port number printing, appear correct, ip:127.0.0.1 port:10000
char event = '1' std::cout << "port: " << ntohs(servaddr.sin_port) << std::endl; std::cout << "ip: " << inet_ntoa(servaddr.sin_addr) << std::endl; sendto(fdpipe[1], (const char*)(event), 1, 0,(struct sockaddr *)&servaddr,sizeof(servaddr));
e
you're casting event
char pointer, not taking address of event mean do.
your sendto line should like;
sendto(fdpipe[1], &event, 1, 0,(struct sockaddr *)&servaddr,sizeof(servaddr));
a tip enable warnings in compiler, have caught suspicious cast.
c linux udp
Comments
Post a Comment