我正在编写一个线程安全的异步网络库。
我正在考虑API设计。库的用户希望编写尽可能少的代码。
哪种语义更正确?
1
a)open()
- 同步,打开套接字。
b)connect(IP, port)
- 异步,连接套接字。
c)close()
- 同步,关闭套接字。
2
a)open(IP, port)
- 异步,打开并连接套接字。
b)close()
- 同步,关闭套接字。
将“已打开”状态视为“已连接”状态在语义上是否正确。这与低级网络库不同,其中“打开”和“连接”是独立的状态。
此外,如果出现错误(打开,连接,读取,写入时),套接字是否应执行资源清理并将其自身恢复到关闭状态?或者,如果套接字进入“错误”状态并要求库的用户执行close()
。