Winsock Error Codes

This section lists the error codes returned by Winsock functions. Understanding these errors is crucial for diagnosing and resolving network communication issues.

Code Name Description
WSAEINTR WSAEINTR A blocked Windows Sockets 1.1 call was canceled by an alarm or an interrupt.
WSAEBADF WSAEBADF A Windows Sockets specific error. This condition is normally detected by the sending code.
WSAEACCES WSAEACCES Permission denied.
WSAEFAULT WSAEFAULT Bad address. The system cannot access the specified address.
WSAEINVAL WSAEINVAL Invalid argument. Some invalid argument was encountered.
WSAEMFILE WSAEMFILE Too many open files.
WSAEWOULDBLOCK WSAEWOULDBLOCK Operation would block.
WSAEINPROGRESS WSAEINPROGRESS A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.
WSAEALREADY WSAEALREADY Operation already in progress.
WSAENOTSOCK WSAENOTSOCK An operation was attempted on something that is not a socket.
WSAEDESTADDRREQ WSAEDESTADDRREQ Destination address required.
WSAEMSGSZ WSAEMSGSZ Message too long.
WSAEPFNOSUPPORT WSAEPFNOSUPPORT Protocol family not supported.
WSAEOPNOTSUPP WSAEOPNOTSUPP Operation not supported.
WSAESHUTDOWN WSAESHUTDOWN Cannot send after transport endpoint shutdown.
WSAETOOMANYREFS WSAETOOMANYREFS Too many references.
WSAETIMEDOUT WSAETIMEDOUT Connection timed out.
WSAECONNREFUSED WSAECONNREFUSED Connection refused.
WSAELOOP WSAELOOP Too many levels of symbolic link.
WSAENAMETOOLONG WSAENAMETOOLONG File name too long.
WSAEHOST_NOT_FOUND WSAEHOST_NOT_FOUND Host not found.
WSAETRY_AGAIN WSAETRY_AGAIN Non-recoverable error.
WSAENO_RECOVERY WSAENO_RECOVERY Non-recoverable error.
WSAENOT_FOUND WSAENOT_FOUND Authoritative answer: host not found.
WSAENOT_RECOVERABLE WSAENOT_RECOVERABLE Entity returned is not a recoverable error.
WSAECONNABORTED WSAECONNABORTED Software caused connection abort.
WSAECONNRESET WSAECONNRESET Connection reset by peer.
WSAENOTCONN WSAENOTCONN Socket is not connected.
WSAESHUTDOWN WSAESHUTDOWN Cannot send after transport endpoint shutdown.
WSAETOOMANYREFS WSAETOOMANYREFS Too many references.
WSAETIMEDOUT WSAETIMEDOUT Connection timed out.
WSAECONNREFUSED WSAECONNREFUSED Connection refused.
WSAEHOST_DOWN WSAEHOST_DOWN Host is down.
WSAEPROCLIM WSAEPROCLIM Too many processes.
WSAEUSERS WSAEUSERS Too many users.
WSAEDQUOT WSAEDQUOT Disk quota exceeded.
WSAESTALE WSAESTALE Stale file handle reference.
WSAEREMOTE WSAEREMOTE Object is remote.
WSASYSNOTREADY WSASYSNOTREADY The network subsystem is unavailable.
WSAVERNOTSUPPORTED WSAVERNOTSUPPORTED The requested Windows Sockets version of the implementation is not supported.
WSANOTINITIALIZED WSANOTINITIALIZED Successful WSAStartup not yet performed.
WSAEDISCON WSAEDISCON A connection was forcibly terminated.
WSAENOMORE WSAENOMORE No more data is available.
WSAECANCELLED WSAECANCELLED Overlapped operation cancelled.
WSAERECEIVED_MORE_DATA WSAERECEIVED_MORE_DATA More data is available.
WSAESOCKTNOSUPPORT WSAESOCKTNOSUPPORT The specified socket type is not supported.

Understanding Winsock Errors

Winsock (Windows Sockets API) is the interface for network programming on Windows. When network operations fail, Winsock functions return specific error codes. These codes help developers identify the root cause of network problems, such as:

Common Error Handling Patterns

When calling Winsock functions, always check the return value. If an error occurs, you can use WSAGetLastError() to retrieve the specific error code and then consult this reference to understand and handle the error appropriately. A typical pattern looks like this:


int result = send(socket, buffer, length, flags);
if (result == SOCKET_ERROR) {
    int errorCode = WSAGetLastError();
    switch (errorCode) {
        case WSAEWOULDBLOCK:
            // Handle non-blocking send buffer full
            printf("Send would block.\n");
            break;
        case WSAECONNRESET:
            // Handle connection reset
            printf("Connection reset by peer.\n");
            break;
        default:
            // Handle other errors
            printf("Send failed with error: %d\n", errorCode);
            break;
    }
} else {
    // Send successful
    printf("Sent %d bytes.\n", result);
}
            
            

Remember to properly initialize Winsock using WSAStartup() before making any Winsock calls and clean up with WSACleanup() when your application is finished.