CÓDIGOS DE ERRORES AL UTILIZAR MODO I PARA ENVIAR MAILS

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