Я кодирую небольшую nmap-подобную программу и фактически создаю сокет для каждого пакета, который создаю вручную.Даже если он отправляет tcp пакеты, я не хочу проводить tcp сессию (я нюхаю ответы и не волнуюсь о том, что произойдет после).Должен ли я объявить только один сокет и повторно использовать его для каждого пакета.
Безопасен ли этот поток для повторного использования сокета?
Спасибо.
int send_raw_packet(s_raw *data, size_t data_size)
{
struct sockaddr_in sin = { .sin_addr.s_addr = 1 };
int socket_fd;
int sendto_res = -1;
char interface[IFNAMSIZ] = "enp0s3"; // Trying things there
socket_fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if (setsockopt(socket_fd, SOL_SOCKET, SO_BINDTODEVICE, interface, ft_strlen(interface)) == -1)
perror("setsockopt: ");
if (socket_fd == -1)
{
perror("Socket: ");
}
else
{
sendto_res = sendto(socket_fd, data, data_size, 0, (struct sockaddr *)&sin, sizeof sin);
if (sendto_res == -1)
perror("\033[091msendto :\033[0m");
close(socket_fd);
}
return sendto_res;
}