Función de devolución de llamada LPWSPSOCKET (ws2spi.h)
La función LPWSPSocket crea un socket. Para obtener información sobre la parte que ha jugado LPWSPSocket en la creación de un socket compartido, consulte Sockets compartidos y Sockets compartidos en el SPI.
Sintaxis
LPWSPSOCKET Lpwspsocket;
SOCKET Lpwspsocket(
[in] int af,
[in] int type,
[in] int protocol,
[in] LPWSAPROTOCOL_INFOW lpProtocolInfo,
[in] GROUP g,
DWORD dwFlags,
[out] LPINT lpErrno
)
{...}
Parámetros
[in] af
Especificación de la familia de direcciones.
[in] type
Especificación de tipo para el nuevo socket.
[in] protocol
Protocolo que se va a usar con el socket específico de la familia de direcciones indicada.
[in] lpProtocolInfo
Puntero a una estructura WSAProtocol_Info que define las características del socket que se va a crear.
[in] g
Reservado.
dwFlags
Especificación de atributo de socket.
[out] lpErrno
Puntero al código de error.
Valor devuelto
Si no se produce ningún error, LPWSPSocket devuelve un descriptor que hace referencia al nuevo socket. De lo contrario, se devuelve un valor de INVALID_SOCKET y hay disponible un código de error específico en lpErrno.
Código de error | Significado |
---|---|
Error en el subsistema de red. | |
La familia de direcciones especificada no se admite. | |
El bloqueo de la llamada a Windows Sockets está en curso o el proveedor de servicios sigue procesando una función de devolución de llamada. | |
No hay más descriptores de socket disponibles. | |
No hay espacio disponible en el búfer. El socket no se puede crear. | |
No se admite el protocolo especificado. | |
El protocolo especificado es el tipo incorrecto para este socket. | |
El tipo de socket especificado no se admite en esta familia de direcciones. | |
El parámetro g especificado no es válido. |
Comentarios
La función LPWSPSocket hace que se asigne un descriptor de socket y los recursos relacionados. De forma predeterminada, el socket creado no tendrá el atributo superpuesto. Se recomienda que los proveedores de Windows Sockets se realicen como sistemas de archivos instalables de Windows y proporcione identificadores de archivos del sistema como descriptores de socket. Estos proveedores deben llamar a WPUModifyIFSHandle antes de volver de esta función. En el caso de los proveedores de Windows Sockets que no son de sistema de archivos, WPUCreateSocketHandle debe usarse para adquirir un descriptor de socket único del Ws2_32.dll antes de volver de esta función. Vea
Asignación de descriptores para obtener más información.
Los valores de af, type y protocol son los proporcionados por la aplicación en el socket de funciones de API correspondiente o WSASocket. Un proveedor de servicios es libre de omitir o prestar atención a cualquiera de estos valores o a todos estos valores según corresponda para el protocolo concreto. Sin embargo, el proveedor debe estar dispuesto a aceptar el valor de cero para af y type, ya que el Ws2_32.dll considera que son valores comodín. Además, el valor de la constante de manifiesto FROM_PROTOCOL_INFO debe aceptarse para cualquiera de los protocolos af, type y . Este valor indica que la aplicación Windows Sockets 2 debe usar los valores correspondientes de la estructura WSAProtocol_Info (iAddressFamily, iSocketType, iProtocol).
El parámetro dwFlags se puede usar para especificar los atributos del socket mediante el operador OR bit a bit con cualquiera de las marcas siguientes.
Marca | Significado |
---|---|
WSA_FLAG_OVERLAPPED | Esta marca hace que se cree un socket superpuesto. Los sockets superpuestos pueden usar LPWSPSend, LPWSPSendTo, LPWSPRecv, LPWSPRecvFrom y LPWSPIoctl para operaciones de E/S superpuestas, que permiten iniciar y procesar varias operaciones simultáneamente. Todas las funciones que permiten operaciones superpuestas también admiten el uso no superpuesto en un socket superpuesto si los valores de los parámetros relacionados con la operación superpuesta son NULL. |
WSA_FLAG_MULTIPOINT_C_ROOT | Indica que el socket creado será un c_root en una sesión de varios puntos. Solo se permite si se indica un plano de control raíz en la estructura WSAProtocol_Info del protocolo. |
WSA_FLAG_MULTIPOINT_C_LEAF | Indica que el socket creado será un c_leaf en una sesión de multidifusión. Solo se permite si XP1_SUPPORT_MULTIPOINT se indica en la estructura WSAProtocol_Info del protocolo. |
WSA_FLAG_MULTIPOINT_D_ROOT | Indica que el socket creado será un d_root en una sesión de varios puntos. Solo se permite si se indica un plano de datos raíz en la estructura WSAProtocol_Info del protocolo. |
WSA_FLAG_MULTIPOINT_D_LEAF | Indica que el socket creado será un d_leaf en una sesión de varios puntos. Solo se permite si XP1_SUPPORT_MULTIPOINT se indica en la estructura WSAProtocol_Info del protocolo. |
Nota
Para sockets multipunto, debe especificarse exactamente un WSA_FLAG_MULTIPOINT_C_ROOT o WSA_FLAG_MULTIPOINT_C_LEAF y se debe especificar exactamente uno de WSA_FLAG_MULTIPOINT_D_ROOT o WSA_FLAG_MULTIPOINT_D_LEAF. Consulte Multidifusión independiente del protocolo y Multipoint en el SPI para obtener información adicional.
Los sockets orientados a la conexión, como SOCK_STREAM proporcionan conexiones dúplex completas, y deben estar en un estado conectado antes de que se puedan enviar o recibir datos en ellos. Se crea una conexión a otro socket con una llamada LPWSPConnect . Una vez conectados, los datos se pueden transferir mediante llamadas LPWSPSend y LPWSPRecv . Cuando se ha completado una sesión, se debe realizar un LPWSPCloseSocket .
Los protocolos de comunicaciones usados para implementar un socket confiable orientado a la conexión garantizan que los datos no se pierdan o dupliquen. Si los datos para los que el protocolo del mismo nivel tiene espacio de búfer no se pueden transmitir correctamente dentro de un período razonable de tiempo, la conexión se considera interrumpida y las llamadas posteriores producirán un error con el código de error establecido en WSAETIMEDOUT.
Los sockets orientados a mensajes sin conexión permiten enviar y recibir datagramas hacia y desde sistemas del mismo nivel arbitrarios mediante LPWSPSendTo y LPWSPRecvFrom. Si este socket está conectado mediante LPWSPConnect a un mismo nivel específico, los datagramas se pueden enviar a ese mismo nivel mediante LPWSPSend y se pueden recibir desde (solo) este par mediante LPWSPRecv.
No se requiere compatibilidad con sockets con tipo SOCK RAW , pero se recomienda a los proveedores de servicios que admitan sockets sin procesar siempre que tenga sentido hacerlo.
Un proveedor de servicios en capas proporciona una implementación de esta función, pero también es un cliente de esta función si y cuando llama a LPWSPSocket de la siguiente capa de la cadena de protocolos. Algunas consideraciones especiales se aplican al parámetro lpProtocolInfo de esta función, ya que se propaga a través de las capas de la cadena de protocolos.
Si la siguiente capa de la cadena de protocolos es otra capa, cuando se llama al LPWSPSocket de la capa siguiente, esta capa debe pasar a la siguiente capa un lpProtocolInfo que haga referencia a la misma estructura de WSAProtocol_Info sin modificar con la misma información de cadena sin modificar. Sin embargo, si la capa siguiente es el protocolo base (es decir, el último elemento de la cadena), esta capa realiza una sustitución al llamar al LPWSPSocket del proveedor base. En este caso, el parámetro lpProtocolInfo debe hacer referencia a la estructura WSAPROTOCOL_INFO del proveedor base.
Una ventaja fundamental de esta directiva es que los proveedores de servicios base no tienen que ser conscientes de las cadenas de protocolo.
Esta misma directiva de propagación se aplica al propagar una estructura de WSAProtocol_Info a través de una secuencia superpuesta de otras funciones, como LPWSPAddressToString, LPWSPDuplicateSocket, WSPStartup o LPWSPStringToAddress.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 2000 Professional [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | ws2spi.h |