MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / udpecho_socket_entry

Function udpecho_socket_entry

examples/test/net_test.c:78–131  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

76#define UDP_SOCKET_BUFFER_SIZE 4096
77rt_thread_t udpecho_socket_tid = RT_NULL;
78void udpecho_socket_entry(void *parameter)
79{
80 int sock;
81 int bytes_read;
82 char *recv_data;
83 rt_uint32_t addr_len;
84 struct sockaddr_in server_addr, client_addr;
85
86 /* allocate the data buffer */
87 recv_data = rt_malloc(UDP_SOCKET_BUFFER_SIZE);
88 if (recv_data == RT_NULL)
89 {
90 /* no memory yet */
91 rt_kprintf("no memory\n");
92 return;
93 }
94 /* create a UDP socket */
95 if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
96 {
97 rt_kprintf("create socket error\n");
98 goto _exit;
99 }
100
101 /* initialize server address */
102 server_addr.sin_family = AF_INET;
103 server_addr.sin_port = htons(UDP_SOCKET_ECHO_PORT);
104 server_addr.sin_addr.s_addr = INADDR_ANY;
105 rt_memset(&(server_addr.sin_zero),0, sizeof(server_addr.sin_zero));
106
107 /* bind socket to server address */
108 if (bind(sock,(struct sockaddr *)&server_addr,
109 sizeof(struct sockaddr)) == -1)
110 {
111 /* bind failed */
112 rt_kprintf("bind error\n");
113 goto _exit;
114 }
115
116 addr_len = sizeof(struct sockaddr);
117 while (1)
118 {
119 /* try to receive from UDP socket */
120 bytes_read = recvfrom(sock, recv_data, UDP_SOCKET_BUFFER_SIZE, 0,
121 (struct sockaddr *)&client_addr, &addr_len);
122
123 /* send back */
124 sendto(sock, recv_data, bytes_read, 0,
125 (struct sockaddr *)&client_addr, addr_len);
126 }
127
128_exit:
129 rt_free(recv_data);
130 return;
131}
132
133/*
134 * TCP echo server

Callers

nothing calls this directly

Calls 8

rt_mallocFunction · 0.85
rt_kprintfFunction · 0.85
socketFunction · 0.85
rt_memsetFunction · 0.85
bindFunction · 0.85
recvfromFunction · 0.85
sendtoFunction · 0.85
rt_freeFunction · 0.85

Tested by

no test coverage detected