CÓDIGOS DE ERRORES AL UTILIZAR MODO I PARA ENVIAR MAILS A continuación se presenta una lista de los códigos de errores que pueden ocurrir al realizar la llamada WSAGetLastError, y una explicación detallada de cada uno de ellos. Los errores se encuentran ordenados alfabéticamente por error macro. Algunos códigos de error definidos en Winsock2.h no son devueltos por ninguna función. WSAEACCES (10013) Permiso negado. Se intentó acceder a un socket de una manera prohibida por los permisos de acceso. Por ejemplo, utilizando una dirección broadcast para sendto sin el permiso del broadcast que se está seteando usando setsockopt(SO_BROADCAST). Otro causa del error WSAEACCES es que cuando se llama a la función de enlace (en Windows NT 4 SPA o posterior), otra aplicación, servicio o kernel mode driver está enlazado a la misma dirección con acceso exclusivo. Ese acceso exclusivo es una nueva característica de Windows NT 4 SP4 y posterior, y se implementa utilizando la opción SO_EXLUSIVEADDRUSE. WSAEADDRINUSE (10048) Dirección en uso. Generalmente se permite un único uso para cada dirección de socket (protocolo/dirección IP/puerto). Este error ocurre si una aplicación intenta enlazar un socket a una dirección IP/puerto que ya ha sido utilizada por un socket existente, o por un socket que no fue cerrado adecuadamente, o por uno que todavía está en proceso de cierre. En el caso de aplicaciones del server que necesitan enlazar sockets múltiples al mismo número de puertos, tenga en cuenta la posibilidad de utilizar setsockopt (SO_REUSEADDR). Las aplicaciones del cliente generalmente no necesitan llamar a un enlace-connect elige automáticamente un puerto que no esté en uso. Cuando se llama al enlace con una dirección comodín (que incluya ADDR_ANY), un error WSAEADDRINUSE podría aparecer hasta que se logra la dirección específica. Esto podría suceder con una llamada a otra función más tarde, incluyendo connect, listen, WSAConnect, o WSAJoinLeaf. WSAEADDRNOTAVAIL (10049) Dirección solicitada no se puede asignar. La dirección solicitada no es válida en el contexto. Esto generalmente sucede al intentar enlazar una dirección que no es válida para la máquina local. Puede ocurrir también al realizar connect, sendto, WSAConnect, WSAJoinLeaf, o WSASendTo cuando la dirección o puerto remoto no es válido para la máquina remota (por ejemplo, dirección o puerto 0). 1 WSAEAFNOSUPPORT (10047) Familia de protocolo no soporta familia de dirección. Se utilizó una dirección incompatible con el protocolo solicitado. Todos los protocolos se crean con una familia de direcciones asociada (es decir, AF_INET for Internet Protocols) y un tipo de protocolo genérico (es decir, SOCK_STREAM). Este error ocurre cuando se solicita explícitamente un protocolo incorrecto en una llamada socket, o cuando se utiliza una dirección de la familia equivocada para un socket (por ejemplo, en sendto). WSAEALREADY (10037) Operación ya iniciada. Se intentó una operación en un nonblocking socket con una operación en progreso –es decir, llamando a una conexión por segunda vez en un nonblocking socket que ya está conectando, o cancelando una solicitud no sincronizada (WSAAsyncGetXbyY) que ya fue cancelada o terminada. WSAECONNABORTED (10053) Software provocó finalización de la conexión. Una conexión establecida fue finalizada por el software en su máquina host, posiblemente debido a una transmisión de información fuera de tiempo o a error de protocolo. WSAECONNREFUSED (10061) Conexión rechazada. No se puede realizar ninguna conexión porque la máquina destino la rechaza activamente. Esto sucede generalmente cuando se intenta conectar a un service que es inactivo en el host foráneo –es decir, sin aplicación del server en funcionamiento. WSAECONNRESET (10054) Conexión reseteada por peer. Se forzó el cierre de una conexión existente desde el host remoto. Esto normalmente ocurre cuando la aplicación peer en el host remoto se detiene de repente, se rebutea el host, o el host remoto usa un cierre duro (vea setsockopt para obtener más información sobre la opción SO_LINGER en el socket remoto). Este error también puede ocurrir si una conexión se terminó debido a una actividad para mantener activo detectando una falla mientras una o más operaciones están en progreso. Las operaciones que se encontraban en progreso fallan con WSAENETRESET. Las operaciones posteriores fallan con WSAECONNRESET. WSAEDESTADDRREQ (10039) Dirección de destino solicitada. Se omitió una dirección solicitada en una operación en un socket. Por ejemplo, este error ocurre cuando se llama a sendto con la dirección remota de ADDR_ANY. 2 WSAEFAULT (10014) Dirección equivocada. El sistema detectó una dirección puntero no válida al intentar usar un argumento puntero de una llamada. Este error ocurre cuando una aplicación pasa un valor puntero no válido, o si el largo del buffer es muy pequeño. Por ejemplo, si el largo de un argumento, que es una estructura SOCKADDR, es más pequeño que el tamaño de (SOCKADDR). WSAEHOSTDOWN (10064) Host caído. Una operación socket falló porque el host de destino está caído. Una operación socket encontró un host muerto. La actividad de red en el host local no ha comenzado. Es más probable que estas condiciones se indiquen con el error WSAETIMEDOUT. WSAEHOSTUNREACH (10065) No hay ruta al host. Se intentó una operación socket a un host inalcanzable. Ver WSAENETUNREACH. WSAEINPROGRESS (10036) Operación en progreso. Se está ejecutando una operación blocking en ese momento. Windows Sockets permite que se destaque una sola operación blocking –por trabajo o hilo-. Si se realiza cualquier otra función llamada (haga referencia o no a ese o cualquier otro socket) la función falla con el error WSAEINPROGRESS. WSAEINTR (10004) Función de llamada interrumpida. Se interrumpió una operación blocking por una llamada a WSACancelBlockingCall. WSAEINVAL (10022) Argumento no válido. Se suministró algún argumento no válido (por ejemplo, especificando un nivel no válido para la función setsockopt). En algunos casos también se refiere al estado actual del socket –por ejemplo, llamando accept en un socket que no está escuchando. WSAEISCONN (10056) Socket ya está conectado. Se realizó una solicitud de conexión en un socket ya conectado. Este error también ocurre en algunas implementaciones si se llama sendto en un socket SOCK_DGRAM conectado (en sockets SOCK_STREAM se ignora el parámetro en sendto). En otras implementaciones esto se considera legal. 3 WSAEMFILE (10024) Demasiados archivos abiertos. Demasiados sockets abiertos. Cada implementación puede tener un número máximo de socket handles disponibles, ya sea globalmente, por proceso, o por hilo. WSAEMSGSIZE (10040) Mensaje demasiado largo. Un mensaje enviado a un socket datagrama fue más grande que el mensaje buffer interno o algún otro límite interno de la red, o el buffer utilizado para recibir un datagrama fue más pequeño que el datagrama. WSAENETDOWN (10050) Red caída. Una operación socket encontró una red muerta. Esto podría indicar una falla grave del sistema de red (es decir, el protocolo stack que el Windows Sockets DLL runs over), la interface de la red, o la red local. WSAENETRESET (10052) Red dejó caer conexión al resetear. La conexión se rompió debido a actividad para mantener activo detectando una falla mientras la operación estaba en progreso. También puede ocurrir en setsockopt si se intenta setear SO_KEEPALIVE en una conexión que ya falló. WSAENETUNREACH (10051) Red inalcanzable. Se intentó una operación socket a una red inalcanzable. Esto generalmente significa que el software local no conoce ninguna ruta para alcanzar el host remoto. WSAENOBUFS (10055) No hay espacio buffer disponible. No se pudo llevar a cabo una operación en un socket porque el sistema no tenía suficiente espacio buffer o porque una cola estaba llena. WSAENOPROTOOPT (10042) Opción de protocolo equivocada. Se especificó una opción desconocida, no válida o no soportada en una llamada getsockopt o setsockopt. 4 WSAENOTCONN (10057) Socket no está conectado. No se autorizó una solicitud para enviar o recibir información porque el socket no está conectado y no se suministró ninguna dirección (al enviar un socket datagrama utilizando sendto). Este tipo de error puede ocurrir también en cualquier otro tipo de operación –por ejemplo,— setsockopt seteando SO_KEEPALIVE si la conexión ha sido reseteada. WSAENOTSOCK (10038) Operación socket fuera de socket. Se intentó una operación en algo que no es un socket. Puede deberse a que el parámetro handle del socket no referenciara un socket válido, o que para seleccionar, un miembro de un fd_set no fuera válido. WSAEOPNOTSUPP (10045) Operación no soportada. La operación que se intentó no es soportada por el tipo de objeto referenciado. Generalmente esto ocurre cuando un socket descriptor to a socket que no puede soportar esta operación intenta aceptar una conexión en un socket datagrama. WSAEPFNOSUPPORT (10046) Familia de protocolo no soportada. La familia de protocolo no ha sido configurada en el sistema o no existe implementación para la misma. El significado de este mensaje tiene una pequeña diferencia con el de WSAEAFNOSUPPORT. Sin embargo, pueden ser intercambiables en la mayoría de los casos, y todas las funciones Windows Sockets que devuelven uno de estos mensajes también especifican WSAEAFNOSUPPORT. WSAEPROCLIM (10067) Demasiados procesos. Una implementación Windows Sockets puede tener un límite en el número de aplicaciones que puede usar al mismo tiempo. WSAStartup puede fallar con este error al alcanzar ese límite. WSAEPROTONOSUPPORT (10043) Protocolo no soportado. No se configuró el protocolo solicitado en el sistema, o no existe implementación para el mismo. Por ejemplo, una llamada socket solicita un socket SOCK_DGRAM, pero especifica un protocolo stream. WSAEPROTOTYPE (10041) Tipo de protocolo equivocado para socket. Se especificó un protocolo en la función llamada del socket que no soporta la semántica 5 del tipo de socket solicitado. Por ejemplo, el protocolo ARPA Intrnet UDP no puede ser especificado con un tipo de socket de SOCK_STREAM. WSAESHUTDOWN (10058) No puede enviar luego de cierre del socket. Se desautorizó una solicitud para enviar o recibir información debido a que el socket ya había sido cerrado en esa dirección con una llamada de cierre anterior. Una llamada de cierre solicita un cierre parcial del socket, lo cual es una señal de que tanto el envío como la recepción, o ambos, se han interrumpido. WSAESOCKTNOSUPPORT (10044) Tipo de socket no soportado. No existe el soporte para el tipo de socket especificado en esta familia de direcciones. Por ejemplo, el tipo opcional SOCK_RAW puede ser seleccionado en una llamada socket, y la implementación no soporta ningún socket SOCK_RAW. WSAETIMEDOUT (10060) Conexión fuera de tiempo. Un intento de conexión falló debido a que la parte conectada no respondió adecuadamente luego de un período de tiempo, o la conexión establecida falló debido a que el host conectado no respondió. WSATYPE_NOT_FOUND (10109) No se encontró tipo de clase. No se encontró la clase especificada. WSAEWOULDBLOCK (10035) Recurso no disponible por el momento. Este error ocurre en operaciones en nonblocking sockets que no pueden ser completadas inmediatamente. Por ejemplo, recv cuando no hay ninguna información en la cola para ser leída desde el socket. No es un error fatal, y debería intentarse realizar la operación más tarde. Es normal que se presente un WSAEWOULDBLOCK al llamar la conexión en un socket SOCK_STREAM nonblocking, dado que debe transcurrir un cierto tiempo para que la conexión se establezca. WSAHOST_NOT_FOUND (11001) No se encontró host. No se conoce el host. El nombre no es un nombre o alias oficial de host, o no se lo encuentra en la base(s) de datos consultada(s). Este error puede ocurrir también en 6 consultas de protocolo y servicio, y significa que no se pudo encontrar el nomb re especificado en la base de datos relevante. WSA_INVALID_HANDLE (OS dependent) Handle del objeto evento especificado no es válido. Una aplicación intenta utilizar un objeto evento, pero el handle especificado no es válido. WSA_INVALID_PARAMETER (OS dependent) Uno o más parámetros no son válidos. Una aplicación utilizó una función Windows Sockets que mapea directamente a una función Win32. La función Win32 indica un problema con uno o más parámetros. WSAINVALIDPROCTABLE (OS dependent) Procedimiento de tabla no válido desde el proveedor de servicio. Un proveedor de servicio devolvió un procedimiento de tabla bogus a Ws2_32.dll. (Generalmente causado por uno o más punteros de la función siendo anulada.) WSAINVALIDPROVIDER (OS dependent) Número de versión del proveedor de servicio no válido. Un proveedor de servicio devolvió un número de versión distinto a 2.0. WSA_IO_INCOMPLETE (OS dependent) Superposición I/O objeto evento no está en estado señalado. La aplicación trató de determinar el estado de una operación superpuesta que no ha sido completada. Las aplicaciones que utilizan WSAGetOverlappedResult (con la flag fWait seteada en FALSE) en un polling mode para determinar cuándo una operación superpuesta ha sido completada tienen este código de error hasta que la operación se completa. WSA_IO_PENDING (OS dependent) Operaciones superpuestas se completarán más tarde. La aplicación inició una operación superpuesta que no puede ser completada inmediatamente. Habrá un indicador de finalización cuando la operación se complete más tarde. 7 WSA_NOT_ENOUGH_MEMORY (OS dependent) Memoria disponible insuficiente. Una aplicación utilizó una función Windows Sockets que directamente mapea a una función Win32. La función Win32 indica una falta de recursos de memoria solicitados. WSANOTINITIALISED (10093) WSAStartup no ha tenido éxito. Puede haber sucedido que la aplicación no haya llamado al WSAStartup o que el WSAStartup falló. La aplicación puede estar puede estar accediendo a un socket que no fuera propio del trabajo activo en ese momento (es decir, tratando de compartir un socket entre trabajos), se ha llamado demasiadas veces a WSACleanup. WSANO_DATA (11004) Nombre válido, no hay registro de información del tipo solicitado. El nombre solicitado es válido y se encontró en la base de datos, pero no tiene la información correcta asociada siendo resuelta. El ejemplo más común de este caso es un intento de traducción de nombre a dirección del host (utilizando gethostbyname o WSAAsyncGetHostByName) el cual usa el DNS (Domain Name Server). Se devuelve un registro MX pero ningún registro A –lo que indica que el host existe, pero no se puede alcanzar directamente. WSANO_RECOVERY (11003) Este es un error no recuperable. Esto indica que algún tipo de error no recuperable ocurrió durante un lookup de la base de datos. Puede deberse a que no se pudieron encontrar los archivos de la base de datos (por ejemplo, archivos de HOSTS, SERVICIOS o PROTOCOLOS BSD-compatibles), o a que el servidor devolvió una solicitud de DNS con un error grave. WSAPROVIDERFAILEDINIT (OS dependent) No se puede iniciar un proveedor de servicio. Puede haber sucedido que no se pudo cargar un proveedor de servicio DLL (falló LoadLibrary) o que falló la función del proveedor WSPStartup/NSPStartup. WSASYSCALLFAILURE (OS dependent) Falla de llamada del sistema. Ocurre cuando falla una llamada del sistema que nunca debería fallar. Por ejemplo, si falla una llamada a WaitForMultipleObjects o una de las funciones de registro falla tratando de 8 manipular los catálogos del nombre del protocolo/nombre. WSASYSNOTREADY (10091) Subsistema de red no está disponible. WSAStartup devuelve este error si la implementación de Windows Sockets no puede funcionar en ese momento debido a que el sistema subyacente que utiliza para suministrar servicios de red no está disponible. Los usuarios deberían verificar: Que el archivo Windows Sockets DLL esté en la ruta actual. Que no están tratando de usar más de una implementación Windows Sockets a la vez. Si hay má s de un Winsock DLL en su sistema, asegúrese de que el primero en la ruta es el correcto para el subsistema de red cargado en ese momento. La documentación de la implementación Windows Sockets para asegurarse de que todos los componentes necesarios estén correctamente instalados y configurados. WSATRY_AGAIN (11002) No se encontró host no autorizado. Generalmente éste es un error temporal durante la resolución del nombre del host, y significa que el servidor local no recibió una respuesta de un server autorizado. Se puede tener éxito al reintentarlo más tarde. WSAVERNOTSUPPORTED (10092) Versión Winsock.dll fuera de rango. La actual implementación Windows Sockets no soporta la versión de especificación Windows Sockets solicitada por la aplicación. Verifique que no se está accediendo a archivos Windows Sockets DLL viejos. WSAEDISCON (10101) Cierre apropiado en progreso. WSARecv y WSARecvFrom devuelven este error para indicar que la parte remota ha comenzado una secuencia de cierre apropiado. WSA_OPERATION_ABORTED (OS dependent) Operación superpuesta finalizó. Se canceló una operación superpuesta debido al cierre del socket, o a la ejecución del comando SIO_FLUSH en WSAIoctl. 9
© Copyright 2024