簡體   English   中英

使用數據報或原始套接字提高Winsock性能

[英]Increasing winsock performance using datagrams or raw sockets

我的以下任務有問題,我需要從服務器接收一些數據,直到遇到一組特定的規則(通過使用c ++正則表達式對其進行檢查)。 目前,我正在使用一個簡單的winsock套接字

ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
do {

    bytes = recv(ClientSocket, buffer, LENGTH, 0);
    if ( bytes > 0 ) {
        //regex checks
         .....
        /* if regex checks are passed i need to close the connection: */
        closesocket(ClientSocket);
        break;
    }

} while( bytes > 0 );

問題是,因為據我所知,套接字是一個流套接字,所以可能會到達附加數據,並通過Windows核心tcp / ip驅動程序將其存儲在一些低級緩沖區中,而我不需要過程,而我不需要處理。 我的目標是通過數據包接收數據,通過正則表達式檢查數據是否符合匹配規則,然后關閉連接,以避免Windows驅動程序接收其他低級數據。 基本上,我希望通過在傳入數據中達到所需的狀態時斷開連接來獲得更高的性能。 所以我想使用一種數據報包,所以問題是它會提高性能嗎? 並且唯一的選擇是將原始套接字與tcp實現一起使用嗎? 或者也許我可以在winsock中將tcp套接字與datagran一起使用?

編輯:簡而言之,我的意思是:

SOCK_STREAM會使Windows tcp / ip驅動程序從內部緩沖區中的服務器接收數據,即使我不使用recv請求它,如果是這樣,那么SOCK_RAW將是選擇嗎?

SOCK_STREAM是基於流的通信,就像文件一樣。 上層應用程序需要知道如何使這些流成為結構化數據。

可能的話,也許您可​​以嘗試基於數據包的SOCK_DGRAM,因此,如果您收到一個數據包,該數據包將所有數據信息都作為一個結構包含在內,那么您就可以整體處理該數據包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM