首页 文章

使用数据报或原始套接字提高winsock性能

提问于
浏览
0

我遇到了以下任务的问题,我需要从服务器接收一些数据,直到我遇到一组特定的规则(通过使用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 core tcp / ip驱动程序存储在某个低级缓冲区中,我不需要过程,我不需要处理 . 我的目标是通过数据包接收数据,通过正则表达式检查匹配规则的数据,然后关闭连接,以避免Windows驱动程序接收额外的低级数据 . 基本上我想获得更高的性能,只需在我实现输入数据所需的时候断开连接 . 所以我想使用一种数据报包 . 所以问题是它会提高性能吗?并且唯一的选择是使用带有tcp实现的原始套接字吗?或者也许我可以在winsock中使用带有tcp套接字的datagran?

EDIT: 我的意思是简短的说法:

SOCK_STREAM 使windows tcp / ip驱动程序从内部缓冲区中的服务器接收数据,即使我没有用 recv 请求它,如果是这样, SOCK_RAW 将是选择吗?

1 回答

  • 0

    SOCK_STREAM是一种基于流的通信,就像文件一样 . 上层应用程序需要知道如何将这些流作为结构化数据 .

    也许你可以尝试SOCK_DGRAM,如果可能的话,这是基于数据包,所以如果你收到一个数据包,包括所有数据信息作为一个结构,你只需处理整个数据包 .

相关问题