gpt4 book ai didi

c++ - RAII 套接字 : when to release (close)

转载 作者:IT王子 更新时间:2023-10-29 00:22:05 24 4
gpt4 key购买 nike

我想在 C 套接字上编写一个简单的小型 C++ RAII 包装器。

问题是套接字在什么状态下被认为已初始化(从 RAII 的角度来看)并因此有资格发布。

例如,对于 TCP 客户端套接字:如果 socket 调用成功,但 connect 调用失败,是否应该调用 close

这只是一个例子,我对一般答案感兴趣,比如:

  • socket成功创建的每个套接字都必须关闭。
  • 必须为每个connectlistenaccept 关闭。

socket & friends 和 close 的手册页不是很清楚(至少对我而言)。

最佳答案

套接字配对的两个部分是 socket()close() 以及 connect()shutdown( )。如您所见,它不像使用 malloc()free() 那样容易。由于并非每个套接字都用于 connect(),有些套接字还使用 bind()accept(),这使情况变得更加复杂.但是,如果您在没有使用 shutdown() 的情况下调用 close(),这只是一次强行关闭,远程端会认为这是一个错误,但您正确地释放了那些被关闭的资源分配。

我会考虑将其包装两次,一次用于调用 close(),另一次用于调用 shutdown()。不过,我不会太担心第二部分,因为 shutdown() 失败仍然基本上是无害的。

关于c++ - RAII 套接字 : when to release (close),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29902463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com