Red de conocimiento informático - Problemas con los teléfonos móviles - En la programación de sockets, recvfrom no recibe el paquete udp (como cuando la red no está disponible), ¿cómo hacer que regrese?

En la programación de sockets, recvfrom no recibe el paquete udp (como cuando la red no está disponible), ¿cómo hacer que regrese?

Si no se produce ningún error, recvfrom() devuelve el número de bytes leídos. Si la conexión ha sido cancelada, devuelve 0.

De lo contrario, se devuelve un error SOCKET_ERROR y la aplicación puede obtener el código de error correspondiente a través de WSAGetLastError().

Código de error:

WSANOTINITIALISED: WSAStartup() debe llamarse correctamente antes de utilizar esta API.

WSAENETDOWN: La implementación del socket WINDOWS ha detectado un fallo en el subsistema de red.

WSAEFAULT: El parámetro fromlen es ilegal; el tamaño del búfer de origen no se puede cargar en la dirección final.

WSAEINTR: El proceso de bloqueo fue cancelado por WSACancelBlockingCall().

WSAEINPROGRESS: Se está ejecutando una llamada de socket de WINDOWS que está bloqueando.

WSAEINVAL: El socket no está vinculado mediante bind().

WSAENOTCONN: Socket no conectado (sólo para tipo SOCK_STREAM).

WSAENOTSOCK: El descriptor no es un socket.

WSAEOPNOTSUPP: Se especifica MSG_OOB, pero el socket no es del tipo SOCK_STREAM.

WSAESHUTDOWN: Se ha cerrado el socket. Cuando se cierra un socket llamando a Shutdown() con un parámetro how de 0 o 2, ya no puede recibir datos usando recv().

WSAEWOULDBLOCK: El socket se identifica como modo sin bloqueo, pero la operación de recepción provocará el bloqueo.

WSAEMSGSIZE: El datagrama era demasiado grande para caber en el buffer, por lo que se cortó.

WSAECONNABORTED: El circuito virtual falló debido a tiempo de espera u otras razones.

WSAECONNRESET: El extremo remoto terminó por la fuerza el circuito virtual.

Simplemente haz un juicio y luego trátalo en consecuencia