posix_quic-master socket函数分析

本文介绍了在POSIX_QUIC-Master项目中,如何使用socket函数创建网络连接。内容涉及socket函数的基本作用,参数解释,以及在QUIC协议中的实现细节。在QUIC的实现中,通过特定的QuicSocketEntry::NewQuicSocketEntry函数创建套接字,并将结果存储在映射中,便于后续操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

socket函数
为了执行网络IO,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型(比如使用IPv4的TCP、使用IPv6的UDP、Unix域字节流协议)和套接字字类型(字节流、数据报或原始套接字)。
#include <sys/socket.h>
int socket(int family, int type, int protocol); // 成功返回非负描述符,出错-1
family指定协议族,type指定套接字类型,protocol指定某个协议类型常值,或者设为0.
socket函数在成功时返回一个小的非负整数值,与文件描述符类似,成为套接字描述符,为了得到这个描述符,需要指定协议族和套接字类型,但是并没有指定本地协议地址和远端协议地址。
当然quic也有自己的socket函数
在POSIX_QUIC-MASTER这套代码中 先看 client端
找到头文件

#include <sys/socket.h>

找到socket函数

QuicSocket socket = QuicCreateSocket();

跟踪这个函数

QuicSocket QuicCreateSocket()
{//返回值是socket  使用自动类型推断
    auto socket = QuicSocketEntry::NewQuicSocketEntry(false);
    DebugPrint(dbg_api, "socket fd = %d", socket->Fd());//输出日志
    return socket->Fd();
}

跟踪QuicSocketEntry::NewQuicSocketEntry(false)函数 ,传入了一个false参数

QuicSocketEntryPtr QuicSocketEntry::NewQuicSocketEntry(bool isServer, QuicCon
<think>好的,我现在需要帮用户理解这两个Mingw-w64编译器的区别,特别是msvcrt和ucrt的部分。首先,用户提到了两个文件名:x86_64-12.2.0-release-posix-seh-msvcrt-rt_v10-rev2和x86_64-12.2.0-release-posix-seh-ucrt-rt_v10-rev2。它们的区别主要在于msvcrt和ucrt这部分,其他部分像posix、seh、版本号都一样,所以重点就是这两个运行时库的不同。 首先,我需要回忆一下msvcrt和ucrt是什么。msvcrt是Microsoft Visual C++ Runtime的缩写,传统上用于Windows的C运行时库,支持较旧的Windows版本,比如XP。而ucrt是Universal C Runtime,从Windows 10开始引入,作为更现代、跨平台的运行时,支持更新的API和功能,比如更好的C11标准支持,以及更安全的函数版本。 接下来,用户可能想知道这两个运行时库对编译的影响。例如,如果用户需要兼容旧版Windows,可能需要用msvcrt,而如果目标是最新系统并需要新特性,ucrt更合适。另外,编译出来的程序依赖的DLL也不同,msvcrt对应的是msvcrt.dll,而ucrt可能需要ucrtbase.dll等,这可能影响程序的分发和依赖。 然后,我需要检查用户提供的引用内容。引用[1]和[3]提到了msvcrt的版本,引用[2]提到了ucrt的版本。可能需要指出这些引用中的版本对应不同的运行时库,帮助用户确认他们下载的文件是否适合他们的目标平台。 另外,用户可能还想知道如何选择这两个版本。比如,如果开发需要支持Windows 7或更早的系统,msvcrt是必须的,因为ucrt在那些系统上不可用。而如果只针对Windows 10及以上,ucrt能提供更好的兼容性和新功能。 还需要注意,ucrt在C标准库的实现上更符合最新标准,可能会有更多的函数和修复。例如,某些安全函数或C11特性可能在ucrt中支持更好。而msvcrt可能在这些方面比较陈旧,但兼容性更广。 最后,总结差异时,需要明确列出两者的对比点:兼容性、C标准支持、依赖的DLL、目标系统版本等。确保用户能根据自身需求做出选择。</think>### Mingw-w64编译器中msvcrt与ucrt运行时库的差异分析 #### 1. **运行时库定义** - **msvcrt**:Microsoft Visual C++ Runtime的缩写,是Windows系统传统的C运行时库,支持Windows XP及更早系统[^3]。 - **ucrt**:Universal C Runtime的缩写,是Windows 10引入的通用C运行时库,提供更现代的C标准实现(如C11)和跨平台兼容性[^2]。 #### 2. **系统兼容性** - msvcrt编译的程序可在Windows XP及以上运行,但缺乏新API支持。 - ucrt编译的程序需要Windows 10或通过安装**Windows 10 SDK**兼容旧系统(需手动部署ucrt依赖文件)[^2]。 #### 3. **C标准支持** - msvcrt:基于C89/C99标准,部分C11特性未实现(如`aligned_alloc`)。 - ucrt:完整支持C11标准,提供更安全的函数变体(如`scanf_s`)。 #### 4. **依赖关系** - msvcrt依赖`msvcrt.dll`(系统内置)。 - ucrt依赖`ucrtbase.dll`等组件,需通过Windows Update或SDK分发[^3]。 #### 5. **应用场景选择** - **选msvcrt**:需兼容Windows XP/7的旧项目。 - **选ucrt**:面向Windows 10+的新项目,或需要C11特性、Unicode强化支持的情况。 ```bash # 查看二进制文件依赖的运行时库 objdump -p your_program.exe | grep "DLL Name" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值