将Windows平台的C++移植到POSIX(Linux)C++ - WSAGetLastError()

3
我目前正在将一些Windows mobile C++代码移植到标准C++。
因此,我正在寻找可以替代Windows特定函数的替代方案。
我很难找到一个标准的C++函数来帮助我替换WSAGetLastError()这个Windows特定函数。
WSAGetLastError()返回与Windows套接字发生错误相关的错误号码。
所以我想知道是否有人知道在标准C++中替换此函数的方法?
获取连接/断开套接字的不同结果的错误号码的方法就足够了。

2
不存在所谓的“Windows C ++”,你也不是试图将其移植到“标准C ++”。你正试图将程序从Windows平台移植到POSIX平台。两者都与标准C ++ 没有太大关系。 - jalf
1
你应该注意到所有套接字函数的文档都告诉你它们存储错误信息的位置。例如:http://linux.die.net/man/2/bind。无论如何,你都会阅读所有文档,因为套接字函数在不同的操作系统上工作方式不同。 Linux 上的套接字函数未必与 Windows 上具有相同名称的函数表现相同。请特别注意边角情况。 - Rob Kennedy
感谢您提供的额外信息,非常感谢。 - Donal Rafferty
2个回答

11

没有标准的 C++ 函数支持套接字。然而,POSIX 套接字函数在出错时应该都会设置 errno 变量 - 您只需要检查它 - 它应该在 errno.h 中声明。


2
如果您正在使用非阻塞连接,则还需要使用 getsockopt(socket, SOL_SOCKET, SO_ERROR, ...); 来获取 connect() 的状态。请注意,成功操作时 errno 不会更改 - 因此您可能希望在每次操作之前将其明确设置为零。 - caf
2
将errno设置为零不是一个好的做法。相反,您应该仅在函数调用返回值指示错误时才检查它。 - anon

1
我建议您使用Boost.ASIO进行移植,它可以抽象出网络差异,并通过使用异步调用和重叠IO来提高性能。完成后,您的代码将在所有支持Boost的平台上运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接