6 #include <netinet/in.h>
7 #include <sys/socket.h>
24 fd = socket(AF_INET, SOCK_STREAM, 0);
26 printf(
"Error: cannot create socket\n");
32 if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes,
sizeof(yes)) < 0)
33 printf(
"Error: failed allowing address reuse\n");
44 while (close(socket_fd))
53 constexpr
int size_temp = 1000;
54 uint8_t temp[size_temp];
55 while (bytes_remaining > 0) {
56 unsigned read_size = (bytes_remaining >= size_temp) ? size_temp : bytes_remaining;
57 int n = read(socket_fd, temp, read_size);
65 int readSocket(
int socket_fd, uint8_t *buffer,
const size_t buffer_size,
int &frame_write_index)
68 uint8_t *dest = buffer + frame_write_index;
72 Tlv::tlv_s *tlv = (Tlv::tlv_s *)buffer;
74 (frame_write_index < (int)
sizeof(Tlv::header_s)) ?
sizeof(Tlv::header_s) :
Tlv::getSize(*tlv);
75 int n = read(socket_fd, dest, bytes_to_read - frame_write_index);
78 if (n == -1 && (errno == EAGAIN || errno == ECONNREFUSED)) {
85 printf(
"Error in reading socket (errno = %d)\n", errno);
90 frame_write_index += n;
95 printf(
"Receive malformated frame: tlv type (%d) is wrong\n", tlv->getType());
101 if (frame_write_index ==
sizeof(Tlv::header_s) &&
Tlv::getSize(*tlv) > buffer_size) {
102 printf(
"Incoming frame too large : %lu (max allocated size %lu)\n",
Tlv::getSize(*tlv), buffer_size);
104 frame_write_index = 0;
109 if (frame_write_index < (
int)
sizeof(Tlv::header_s) || frame_write_index < (
int)
Tlv::getSize(*tlv))
130 ret = inet_pton(AF_INET, ipv4, (uint8_t *)&addr);
132 printf(
"Cannot parse ALB IPv4");
137 struct sockaddr_in alb = {};
138 alb.sin_family = AF_INET;
140 alb.sin_port = htons(port);
142 ret = connect(
socket_fd, (
struct sockaddr *)&alb,
sizeof(alb));
145 if (errno == ECONNREFUSED)
151 printf(
"Connected to %s:%d\n", ipv4, port);
161 int frame_write_index = 0;
184 printf(
"Error closing socket\n");