我想在C套接字上编写一个简单的小型C ++ RAII包装器。
问题在于什么状态是被认为是初始化的套接字(从RAII的角度来看),因此有资格发布。
例如,对于TCP客户端套接字:如果Char
调用成功,但socket
调用失败,是否应调用connect
?
这只是一个例子,我对一般答案感兴趣,例如:
close
成功创建的每个套接字
或socket
,connect
或listen
必须关闭。 accept
&的手册页朋友和socket
不是很清楚(或者至少对我来说)。
答案 0 :(得分:3)
配对套接字的两个部分是socket()
close()
和connect()
shutdown()
。如您所见,它并不像malloc()
和free()
那么简单。事实上,并非每个套接字都用于connect()
,而有些套接字也使用bind()
和accept()
,这使事情变得更加复杂。但是,如果您在没有close()
的情况下调用shutdown()
,则只是远程端出现错误的强制关闭,但您正确释放已分配的资源。
我会考虑将其包装两次,一次调用close()
,另一次调用shutdown()
。我不会过分担心第二部分,因为shutdown()
的失败仍然是无害的。