我想编写一个简单、小型的C++ RAII包装器,用于C套接字。
问题在于,从RAII的角度来看,何时认为套接字处于初始化状态,因此可以释放。
例如,对于TCP客户端套接字:如果
这只是一个例子,我对一般的答案感兴趣,类似于:
问题在于,从RAII的角度来看,何时认为套接字处于初始化状态,因此可以释放。
例如,对于TCP客户端套接字:如果
socket
调用成功,但connect
调用失败,是否应该调用close
?这只是一个例子,我对一般的答案感兴趣,类似于:
- 每个由
socket
成功创建的套接字都必须关闭。
或者 - 必须有一个
connect
、listen
或accept
对应一个close
。
socket
及其相关函数和close
的手册并不太清楚(至少对我来说)。
socket
或accept
返回一个非INVALID_SOCKET
的值时,套接字句柄是有效的,直到你关闭该句柄。 - Captain ObvliousINVALID_SOCKET
是一个WinSock常量,@CaptainObvlious。按照Unix传统,Linux使用文件描述符来索引从零开始的数组,因此任何小于零的值都是例如socket()
的“错误”返回值。哦,而检查负值对于64位的WinSock会失败,因为那里套接字句柄类型是无符号整数,如果我没记错的话(我必须承认已经有一段时间了)。 - Ulrich Eckhardt