是否在c++中为Socket库使用异常
Whether to use exceptions in C++ for Socket library?
我计划用c++编程语言构建一个可移植的Socket库。众所周知,在网络编程中,错误是经常发生的。其中一些是可以恢复的,而另一些则不能。我计划在c++中使用异常来跟踪异常,做一些日志操作并通知最终用户。然而,使用异常是极其困难的,并且使用错误码等经典技术将导致代码难以阅读(大量if
语句)。你的偏好是什么?
使用返回码的缺点是人们会忘记错误处理。这种情况不可能有例外。但是,如果您编写的返回代码类在其析构函数中断言,除非读取或显式忽略返回值,否则您可以获得返回值的可移植性和性能,而不会出现错误处理不良的缺点。如果调用者需要处理异常,您仍然需要手动转发错误代码。
这个问题的答案都归结为您希望在哪里以及如何处理错误条件。
异常处理在解析器中真正发挥作用的时候,需要从一些深度嵌套的代码中返回,然后才有意义地处理错误。检查错误代码将是一个无用的负担。
IO可能略有不同,因为至少在接近故障点的某种程度上处理错误是有意义的。如果允许错误向上传播,将失去上下文,使错误处理无效。
无论您决定做什么,始终记录故障点,以便以后可以正确地调试它。异常往往会隐藏故障点,使调试变得非常困难。
我计划用c++编程语言构建一个可移植的Socket库。
好主意。但是你可以看看有没有现成的。
众所周知,在网络编程中,错误是经常发生的。
是的。
其中一些是可恢复的,而另一些则不可恢复。
。
那你的偏好是什么?
两者的组合。
在我的套接字库内部,我在函数之间使用错误码。检查结果并采取适当的措施。如果操作是可恢复的(即只是重新尝试读取),则不使用异常。如果问题无法恢复,那么我会抛出异常,因为我无法在套接字库中修复它,解析需要更多上下文,因此抛出异常并允许使用代码根据使用情况强制执行正确的解析。
顺便问一下,有没有轻量级的套接字库(教育用途的是受欢迎的,像Ace这样的东西真的很难理解)?
没有文档,但是非常容易使用:
https://github.com/Loki-Astari/ThorsSocket如果你想看到一个套接字包装成c++流的样子:
https://github.com/Loki-Astari/ThorsStream- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 为什么异常不退出程序?
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 是什么导致了Unity 3D中的"错误线程异常"?
- 如何将strftime中的格式错误作为异常捕获
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 尝试使用智能指针时引发异常
- 函数如何通知用户它基于函数原型抛出异常?
- Zeromq socket.RECV()提出了一个stack_overflow异常
- boost::asio::socket 保持活动状态set_option异常
- 是否在c++中为Socket库使用异常