/* This installs the socket and sets up for udp datagram */
_io_socket_install("socket:");
udp_addr.sin_family = AF_INET;
udp_addr.sin_port = 5050;
udp_addr.sin_addr.s_addr = INADDR_ANY;
sock2 = socket(PF_INET, SOCK_DGRAM, 0);
return_error_if(sock2 == RTCS_SOCKET_ERROR);
error = bind(sock2, &udp_addr, sizeof(udp_addr));
return_error_if(error != RTCS_OK);
/* this waits for a UDP datagram */
while (1)
{
udp_sock = RTCS_selectall(0);
return_error_if(udp_sock == RTCS_SOCKET_ERROR);
if(udp_sock == sock2)
{
/* Datagram socket received data. */
memset(&udp_addr, 0, sizeof(udp_addr));// clean out ip info
memset(&udp_union.udp_buffer, 0, UDP_BUF_LEN); //clean out buffer
rlen = sizeof(udp_addr);
peer_adr_len = recvfrom(sock2, udp_union.udp_buffer, UDP_BUF_LEN, 0, &udp_addr, &rlen);
/* I like to use union because I'm old school */
union
{
in_struct in_msg;
out_struct out_msg;
uchar udp_buffer[UDP_BUF_LEN];
}udp_union;
if (peer_adr_len == RTCS_ERROR)
{
continue;
}
else
{
memcpy(&remote, &udp_addr, sizeof(remote)); // capture a copy of ip info
remote.sin_addr.s_addr = INADDR_BROADCAST;
if( strcmp(udp_union.in_msg.company_text,search_name))
continue;
/* the UDP is broadcast to all so I have to make sure its for me */
/* sending formatted data */
error = sendto(sock2,&udp_union.out_msg,512,0,&remote, sizeof(remote));
EASY PEESY PUDDIN PIE