2011-02-11 13 views
5

Estoy llamando al método ConnectEx(). Devuelve el valor FALSO, así que verifico el código de error con la llamada WSAGetLastError. A veces sucede que el valor de retorno es cero. Qué significa eso?WSAGetLastError devolviendo cero

Respuesta

4

El WSAGetLastError se debe llamar inmediatamente cuando se produce un error. Algunas funciones pueden restablecer el último código de error extendido a 0

Más información en MSDN.

1

No hay ningún código de error Winsock con valor 0, por lo tanto, mi mejor opción es que no invocó WSAStartup.

0

La función winsock recv puede devolver un error (SOCKET_ERROR) y luego, incluso si la próxima llamada es a WSAGetLastError esto todavía puede devolver un 0 como un código de error.

Encontré este 'error' cuando cambio del modo de depuración al modo de lanzamiento. Mi código funcionaba bien cuando se depuraba, pero desconectaba los clientes cuando estaba en modo de lanzamiento.

La razón de esto es que el búfer de recepción no era lo suficientemente grande. Pero esto no está documentado en ningún lado. En mi caso, el modo de liberación hizo las cosas lo suficientemente rápido como para desbordar el búfer.

simple hecho de aumentar el tamaño de la memoria intermedia va a resolver el problema (la tercera parámetro en recv.

Esperanza esta ayuda. Buena suerte