简介
- windows平台下C++编程常用函数笔记
C++ WSAGetLastError()函数 详解
WSAGetLastError()
是用于在 Windows Sockets API (也称为 WinSock) 中获取上一次操作的错误代码的函数。它与标准 C 库中的 GetLastError()
类似,但专门用于处理与网络相关的错误。
在调用 WinSock 函数时,某些操作可能会失败,而这些函数通常会返回一个特殊的值(例如 SOCKET_ERROR
或 INVALID_SOCKET
),以指示操作没有成功。在这种情况下,WSAGetLastError()
用于检索详细的错误代码,以帮助开发人员诊断问题。
函数定义
1 | int WSAGetLastError(void); |
- 返回值:返回上一次失败的 WinSock 函数调用的错误代码。
使用场景
错误处理:当调用诸如
socket()
,bind()
,connect()
,send()
,recv()
等网络函数时,如果返回值指示失败,您可以立即调用WSAGetLastError()
来获取更详细的错误信息。排查问题:通过返回的错误代码,可以判断是什么原因导致操作失败,比如网络不可达、连接超时、权限不足等。
常见错误代码
以下是一些常见的错误代码及其含义:
WSAEACCES (10013)
:权限被拒绝。可能是由于防火墙或权限问题。WSAEADDRINUSE (10048)
:地址已在使用中。尝试绑定一个已经被占用的端口。WSAEADDRNOTAVAIL (10049)
:指定的地址无效,无法连接到指定的 IP 地址。WSAENETDOWN (10050)
:网络子系统已失败。WSAENETUNREACH (10051)
:网络无法到达。通常表示无法访问远程主机的网络。WSAECONNABORTED (10053)
:软件导致的连接中止。通常是由于超时或其他问题导致连接中断。WSAECONNRESET (10054)
:远程主机强行关闭连接。WSAETIMEDOUT (10060)
:连接尝试超时。
示例代码
下面是一个简单的使用 WSAGetLastError()
的示例,展示如何处理网络函数失败时的错误:
1 |
|
注意事项
- 只获取最近的错误:
WSAGetLastError()
只会返回最近一次失败的 WinSock 操作的错误代码。因此,它需要在失败操作后立即调用,延迟调用可能导致错误信息被覆盖。 - 线程安全:
WSAGetLastError()
是线程安全的,每个线程都有自己的错误代码,不会与其他线程冲突。
通过 WSAGetLastError()
,你可以获取到更加精确的错误信息,以便进行有效的网络调试和处理。