Función de devolución de llamada LPWSPBIND (ws2spi.h)

La función LPWSPBind asocia una dirección local (es decir, un nombre) a un socket.

Sintaxis

LPWSPBIND Lpwspbind;

int Lpwspbind(
  [in]  SOCKET s,
  [in]  const sockaddr *name,
  [in]  int namelen,
  [out] LPINT lpErrno
)
{...}

Parámetros

[in] s

Descriptor que identifica un socket independiente.

[in] name

Dirección que se va a asignar al socket, en forma de una estructura de sockaddr .

Excepto para el miembro sa_family , el contenido de sockaddr se expresa en orden de bytes de red. En Windows Sockets 2, el parámetro name no se interpreta estrictamente como puntero a una estructura sockaddr . Se convierte de esta manera para la compatibilidad con Winsock. La estructura real se interpreta de forma diferente en el contexto de diferentes familias de direcciones. Los únicos requisitos son que el primer u_short es la familia de direcciones y el tamaño total del búfer de memoria, en bytes, es namelen.

[in] namelen

Longitud, en bytes, de estructura a la que apunta el parámetro name .

[out] lpErrno

Puntero al código de error.

Valor devuelto

Si no se produce ningún error, LPWSPBind devuelve cero. De lo contrario, devuelve SOCKET_ERROR y un código de error específico está disponible en lpErrno.

Código de error Significado
WSAENETDOWN
Error en el subsistema de red.
WSAEADDRINUSE
Algunos procesos del equipo local ya están enlazados a la misma dirección completa (por ejemplo, dirección IP y puerto en el caso **AF_INET**) y el socket no se ha marcado para permitir la reutilización de direcciones con SO_REUSEADDR. (Consulte la opción de socket SO_REUSEADDR en LPWSPSetSockOpt).
WSAEADDRNOTAVAIL
La dirección especificada no es una dirección válida para este equipo.
WSAEFAULT
El nombre o el parámetro namelen no es una parte válida del espacio de direcciones del usuario, el parámetro namelen es demasiado pequeño, el parámetro name contiene un formato de dirección incorrecto para la familia de direcciones asociada o los dos primeros bytes del bloque de memoria especificado por nombre no coinciden con la familia de direcciones asociada con los descriptores de socket.
WSAEINPROGRESS
La función se invoca cuando una devolución de llamada está en curso.
WSAEINVAL
El socket ya está enlazado a una dirección.
WSAENOBUFS
No hay suficientes búferes disponibles, hay demasiadas conexiones.
WSAENOTSOCK
El descriptor no es un socket.

Comentarios

La función LPWSPBind se usa en un socket sin conexión o orientado a conexiones, antes de las llamadas posteriores a las funciones LPWSPConnect o LPWSPListen . Cuando se crea un socket con LPWSPSocket, existe en un espacio de nombres (familia de direcciones), pero no tiene asignado ningún nombre ni dirección local. La función LPWSPBind establece la asociación local del socket asignando un nombre local a un socket sin nombre.

Por ejemplo, en la familia de direcciones de Internet, un nombre consta de tres partes: la familia de direcciones, una dirección de host y un número de puerto que identifica el cliente SPI de Winsock. En Windows Sockets 2, el parámetro name no se interpreta estrictamente como puntero a una estructura sockaddr . Los proveedores de servicios son libres de considerarlo como puntero a un bloque de memoria de tamaño namelen. Los dos primeros bytes de este bloque (correspondientes a sa_family en la declaración sockaddr ) deben contener la familia de direcciones que se usó para crear el socket. De lo contrario, se indicará el error WSAEFAULT .

Si un cliente SPI de Windows Sockets 2 no le importa la dirección local asignada, especificará el valor constante del manifiesto ADDR_ANY para el miembro sa_data del parámetro name . Esto indica al proveedor de servicios que use cualquier dirección de red adecuada. Para TCP/IP, si el puerto se especifica como cero, el proveedor de servicios asignará un puerto único al cliente SPI de Winsock con un valor comprendido entre 1024 y 5000. El cliente SPI puede usar LPWSPGetSockName después de LPWSPBind para conocer la dirección y el puerto que se le ha asignado. Sin embargo, tenga en cuenta que si la dirección de Internet es igual a INADDR_ANY, LPWSPGetSockSockOpt no será necesariamente capaz de proporcionar la dirección hasta que se conecte el socket, ya que varias direcciones pueden ser válidas si el host es multihomed.

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]
Encabezado ws2spi.h

Consulte también

sockaddr

LPWSPConnect

LPWSPGetSockName

LPWSPListen

WSPSetSockOpt

LPWSPSocket