|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
在使用libpcap時,給循環創建多線程出現的問題
這是我在使用多線程的時候碰到的一個問題,請各位大蝦指點,謝謝。
線程的創建放在主函數里,語句為:
if(pthread_create(&thread_id,NULL,InterfaceThread,(void*)pd)>;0)
{
perror("pthread_create error");
exit(3);
}
而線程執行函數語句為:
void *InterfaceThread(void *pd)
{
/*Loop read packets on the device. */
if(pcap_loop(pd,-1, PacketProcess, NULL) < 0)
{
fprintf(stderr,"pcap_loop:%s\n",pcap_geterr(pd));
exit(1);
}
pcap_close(pd);
pthread_exit(NULL);
}
其中pd的 定義為:pcap_t *pd;(為一個 文件描述符)
在 執行函數時,錯誤為:
pcap_loop:read: Bad file descriptor.
請問那麼要如何定義create的第四個參數呢,而要pd如何才能傳到interfaceThread函數呢? |
在使用libpcap時,給循環創建多線程出現的問題
這種方式不會有問題。
你直接調用這個處理函數看看,報不報錯?
另外還有可能你的其它並發線程先關閉了這個pcap_t描述符。 |
在使用libpcap時,給循環創建多線程出現的問題
pthread_creat() 的第四個參數不就是個指針嘛,用來放線程函數的參數 |
在使用libpcap時,給循環創建多線程出現的問題
謝謝,可能是我的主線程關閉了pd描述符,我再試試看。 |
| |