RAII 套接字:何时释放(关闭)



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

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

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

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

  • 必须关闭socket成功创建的每个套接字。
  • 每个connectlistenaccept都必须有一个收盘价。

socket和朋友以及close的手册页不是很清楚(或者至少对我来说)。

用于插座配对的两个部分是socket() close()connect() shutdown()。如您所见,它并不像malloc()free()那样容易。由于并非每个套接字都用于connect(),有些套接字还使用bind()accept(),这使情况更加复杂。但是,如果您在没有shutdown()的情况下调用close(),这只是远程端作为错误经历的强制关机,但您正确地释放了已分配的资源。

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

最新更新