CAsyncSocket::IOCtl
Llame a esta función miembro para controlar el modo de un socket.
BOOL IOCtl(
long lCommand,
DWORD* lpArgument
);
Parámetros
lCommand
El comando de realizar en el socket.lpArgument
un puntero a un parámetro para lCommand.
Valor devuelto
Distinto de cero si la función es correcta; si no 0, y un código de error específico puede recuperar llamando a GetLastError. Los errores siguientes se aplican a esta función miembro:
WSANOTINITIALISED A AfxSocketInit correcto debe aparecer antes de utilizar esta API.
La implementación de Windows Sockets deWSAENETDOWN The detectó que produjo el subsistema de la red.
WSAEINVAL lCommand no es un comando válido, o lpArgument no es un parámetro aceptable para lCommand, o el comando no es aplicable al tipo de socket proporcionado.
La operación de Windows Sockets de bloqueo deWSAEINPROGRESS A está en curso.
WSAENOTSOCK El descriptor no es un socket.
Comentarios
esta rutina se puede utilizar en cualquier socket en cualquier estado. Se usa para obtener o recuperar los parámetros de ejecución asociado al socket, el protocolo y el subsistema de comunicaciones. Se admiten los siguientes comandos:
FIONBIO habilita o deshabilita el modo sin bloqueos en el socket. Los puntos del parámetro de lpArgument en DWORD, que es distinto de cero si el modo sin bloqueo está habilitado y cero si se va a deshabilitar. Si AsyncSelect se ha emitido en un socket, cualquier intento de utilizar IOCtl para establecer el socket de nuevo al modo de bloqueo producirá WSAEINVAL. Para establecer el socket de nuevo al modo de bloqueo y evitar el error de WSAEINVAL , una aplicación debe deshabilitar primero AsyncSelect llamando a AsyncSelect con el parámetro de lEvent igual a 0, llamar IOCtl.
FIONREAD determina el número de bytes máximo que se pueden leer con una llamada de Recibir de este socket. Los puntos del parámetro de lpArgument en DWORD en las que IOCtl almacena el resultado. Si este socket es de SOCK_STREAMescrito, FIONREAD devuelve la cantidad total de datos que se pueden leer en solo Recibir; éste es normalmente el mismo que la cantidad total de datos en cola en el socket. Si este socket es de SOCK_DGRAMescrito, FIONREAD devuelve el tamaño del primer datagrama en cola en el socket.
SIOCATMARK determina si se ha leído todos los datos fuera de banda. Solo se aplica a un socket de SOCK_STREAM tipo configurado para la recepción entre líneas de cualquier dato fuera de banda (SO_OOBINLINE). Si ningún dato fuera de banda está esperando para leer, la operación devuelve cero. Si no devuelve 0, y Recibir siguiente o ReceiveFrom realizado en el socket recuperará algunos o todos los datos que preceden la “mark”; la aplicación debe utilizar la operación de SIOCATMARK para determinar si permanece algunos datos. Si hay datos normales que preceden a los datos (fuera de banda) “urgentes”, se recibió en orden. (Observe que Recibir o ReceiveFrom nunca mezclará datos fuera de banda y normales en la misma llamada.) Los puntos del parámetro de lpArgument en DWORD en las que IOCtl almacena el resultado.
Esta función es un subconjunto de ioctl () como se utiliza en los sockets de Berkeley. En particular, no hay ningún comando equivalente a FIOASYNC, mientras que SIOCATMARK es el único comando de socket-nivel se admite que.
Requisitos
encabezado: afxsock.h