Sou um novato absoluto em redes no Linux. Em particular, eu estava procurando alguns exemplos de protocolo ICMP, em particular, eu estava procurando solicitações de ping e respostas. Normalmente, tudo começa abrindo um soquete bruto
int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
e então há algo como (código incompleto)
while (1) {
sendto(sockfd, ...);
usleep(CERTAIN_TIME);
recvfrom(sockfd, ...);
// then the reply is elaborated
}
Eu estava pensando se também é possível abrir dois desses soquetes brutos: um usado apenas com sendto
, o outro usado com recvfrom
e usá-los por dois threads diferentes:
// initialization
int sendsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
int recvsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
então
// thread 1
while (1) {
sendto(sendsock, ...);
usleep(CERTAIN_TIME);
}
// thread 2
while (1) {
recvfrom(recvsock, ...);
usleeep(CERTAIN_TIME);
}
É seguro?