Добрый день!
Имеется некоторая программа, которая достаточно часто вызывает функцию getprotobynumber():
pe = getprotobynumber(proto);
if (dir > 0) {
fprintf(stdout, "OUT %llu:%llu %u.%u.%u.%u:%u %u.%u.%u.%u:%u %s\n",
received, sent, src[0], src[1], src[2], src[3], srcport,
dst[0], dst[1], dst[2], dst[3], dstport,
pe?(pe->p_name):"unk");
} else {
fprintf(stdout, "IN %llu:%llu %u.%u.%u.%u:%u %u.%u.%u.%u:%u %s\n",
received, sent, src[0], src[1], src[2], src[3], srcport,
dst[0], dst[1], dst[2], dst[3], dstport,
pe?(pe->p_name):"unk");
}
В какой-то (очень редкий) момент времени, программа начинает крутиться в бесконечном цикле:
open("/etc/protocols", O_RDONLY|O_CLOEXEC) = 4
fcntl64(4, F_GETFD) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=2626, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fbf000
read(4, "# Internet (IP) protocols\n#\n# Upd"..., 4096) = 2626
close(4) = 0
munmap(0xb7fbf000, 4096) = 0
open("/etc/protocols", O_RDONLY|O_CLOEXEC) = 4
fcntl64(4, F_GETFD) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=2626, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fbf000
read(4, "# Internet (IP) protocols\n#\n# Upd"..., 4096) = 2626
close(4) = 0
....
Ничего, имеющего отношения к этой проблеме, в программе кроме указанного вызова getprotobynumber() нет. Есть идеи, из-за чего данная проблема может возникать?