2013-03-22 87 views
0

我想使用libpcap的 的代碼片段如下pcap_next()函數應該放在數據包傳輸之前還是之後?

pcap_packet = pcap_next(pcap_handler, &pcap_header); 
    if(pcap_packet !=NULL) 
      printf("capture one packet with length of %d\n", pcap_header.len); 

    // establish TCP connection with the server 
    connect(sd_cli, (struct sockaddr *)&svr_addr, sizeof(svr_addr)); 

    process(pcap_packet); 

我不知道我是否應該把pcap_next()函數之前連接(捕捉的TCP-3WAY握手的ACK包)或之後連接()?我有點在回調函數機制失去

誰能解釋一下這個例子嗎?感謝

回答

0

你應該捕獲數據包併發傳輸。所以,最好使用線程。

但在你的情況下,connect之前pcap_next有更好的機會捕捉你所需要的。但是,connect本身是一種阻塞方法,可能會丟失數據包。

+0

那麼,如何同步線程?讓他們同時準確運行? – user1944267 2013-03-22 17:35:17

+0

爲什麼在'pcap_next'之前連接'?在connect之後,數據包已經被接收,並且在接收到數據包之後,調用'pcap_next',看起來'pcap_next'什麼都不會捕獲? – user1944267 2013-03-22 17:36:40

+0

您不需要應用程序同步,捕獲線程中的數據包並過濾它們以收集您想要的內容。 – deepmax 2013-03-22 17:38:22

相關問題