88 int sockfd_listen = 0;
96 struct sockaddr_in dest_addr = {0};
97 struct sockaddr_in source_addr = {0};
98 struct timeval timeout = {0};
101 dest_addr.sin_family = AF_INET;
102 dest_addr.sin_port = htons(
PORT);
103 addr_family = AF_INET;
104 ip_protocol = IPPROTO_IP;
106 sockfd_listen = socket(addr_family, SOCK_STREAM, ip_protocol);
107 if (sockfd_listen < 0) {
108 XF_LOGE(
TAG,
"Unable to create socket: errno %d", errno);
114 err = bind(sockfd_listen, (
struct sockaddr *)&dest_addr,
sizeof(dest_addr));
116 XF_LOGE(
TAG,
"Socket unable to bind: errno %d", errno);
122 err = listen(sockfd_listen, 1);
124 XF_LOGE(
TAG,
"Error occurred during listen: errno %d", errno);
130 socklen_t addr_len =
sizeof(source_addr);
131 sockfd_conn = accept(sockfd_listen, (
struct sockaddr *)&source_addr, &addr_len);
132 if (sockfd_conn < 0) {
133 XF_LOGE(
TAG,
"Unable to accept connection: errno %d", errno);
139 setsockopt(sockfd_conn, SOL_SOCKET, SO_RCVTIMEO, &timeout,
sizeof(timeout));
142 setsockopt(sockfd_conn, SOL_SOCKET, SO_KEEPALIVE, &keepAlive,
sizeof(
int));
143 setsockopt(sockfd_conn, IPPROTO_TCP, TCP_KEEPIDLE, &keepIdle,
sizeof(
int));
144 setsockopt(sockfd_conn, IPPROTO_TCP, TCP_KEEPINTVL, &keepInterval,
sizeof(
int));
145 setsockopt(sockfd_conn, IPPROTO_TCP, TCP_KEEPCNT, &keepCount,
sizeof(
int));
148 socklen_t socklen =
sizeof(source_addr);
149 int len = recvfrom(sockfd_conn,
150 rx_buffer,
sizeof(rx_buffer) - 1, 0,
151 (
struct sockaddr *)&source_addr, &socklen);
153 XF_LOGE(
TAG,
"recvfrom failed: errno %d", errno);
155 }
else if (len == 0) {
161 src_ip4.
addr = source_addr.sin_addr.s_addr;
166 int payload_len = strlen(
payload);
167 err = sendto(sockfd_conn,
169 (
struct sockaddr *)&source_addr,
sizeof(source_addr));
171 XF_LOGE(
TAG,
"Error occurred during sending: errno %d", errno);
181 if (sockfd_conn != -1) {
182 shutdown(sockfd_conn, 0);
183 closesocket(sockfd_conn);
185 if (sockfd_listen != -1) {
187 shutdown(sockfd_listen, 0);
188 closesocket(sockfd_listen);
static const xf_osal_thread_attr_t s_thread_attr
static void _example_thread(void *argument)
static xf_osal_thread_t s_thread_hdl
static const char * payload
#define KEEPALIVE_INTERVAL