работа с msgsnd в линуксе
у меня pcap с помощью loop получает пакет. я отправляю с помощью очереди пакет, с помощью msgsnd, я пока точно не знаю как правильно работать с этим, по этому выделяю память для пакета сразу. я щас приведу пример и он не правильный. но проблема в том, что когда pcap_callback отправит сообщение и закончиться функция, то буфер bytes будет заменен другим пакетом. а в потоке control_packet_cb возможно что обработается уже пакет с другими данными.
void pcap_callback ( u_char *user, const struct pcap_pkthdr *h, const u_char *bytes ) {
struct msg *m = malloc ( sizeof ( struct msg ) );
m->pkt = malloc ( h->len );
memcpy ( m->pkt, bytes, h->len );
m->mtype = 1;
msgsnd ( msgid, m, h->len + sizeof ( long ), IPC_NOWAIT | 0666 );
}
void *control_packet_cb ( void *data ) {
int thread_id = thread_count++;
struct msg m;
while ( 1 ) {
msgrcv ( msgid, &m, 1500, 1, 0 );
}
}