添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

标识绑定的未连接套接字的描述符。

[in] backlog

挂起连接队列的最大长度。 如果设置为 SOMAXCONN ,则 负责套接字的基础 服务提供商会将积压工作设置为最大合理值。 如果设置为 SOMAXCONN_HINT (N) ((其中 N 为数字) ),积压工作值将为 N,调整为 (介于 200、65535) 范围内。 请注意, SOMAXCONN_HINT 可用于将积压工作设置为大于 SOMAXCONN 的值。

SOMAXCONN_HINT 仅受 Microsoft TCP/IP 服务提供商支持。 没有用于获取实际积压工作值的标准预配。

如果未发生错误, 侦听 将返回零。 否则,返回 SOCKET_ERROR 值,可以通过调用 WSAGetLastError 来检索特定的错误代码。

若要接受连接,首先使用套接字函数创建 套接字 ,并使用 绑定 函数绑定到本地地址。 使用 侦听 指定传入连接的积压工作,然后使用 accept 函数接受连接。 面向连接的套接字(例如,类型 为 SOCK_STREAM 的套接字)用于 侦听 。 套接字进入 被动模式,进程确认传入连接请求并排队等待接受。

SOMAXCONN 积压 的值是一个特殊的常量,指示 负责套接字的基础 服务提供商将挂起连接队列的长度设置为最大合理值。

在 Windows 套接字 2 上,此最大值默认为大值, (通常为数百个或多个) 。

在蓝牙应用程序中调用 侦听 函数时,强烈建议将低得多的值用于 积压工作 参数 (通常为 2 到 4) ,因为只接受少数客户端连接。 这减少了分配供侦听套接字使用的系统资源。 此相同建议适用于仅需要几个客户端连接的其他网络应用程序。

侦听 函数通常由一次可以有多个连接请求的服务器使用。 如果连接请求到达且队列已满,则客户端将收到一个错误,指示 WSAECONNREFUSED 。

如果没有可用的套接字描述符, 则侦听 尝试继续正常运行。 如果描述符可用,稍后调用 侦听 或 接受 会将队列重新填充到为 积压工作 参数指定的当前或最新值(如果可能),并恢复侦听传入连接。

如果在已侦听套接字上调用 侦听 函数,它将返回成功,而不会更改 积压工作 参数的值。 在后续调用中将 积压工作 参数设置为 0,以 侦听 套接字时,不被视为适当的重置,尤其是在套接字上存在连接时。

注意 发出阻止 Winsock 调用(例如 侦听 )时,Winsock 可能需要等待网络事件,然后才能完成调用。 Winsock 在此情况下执行可警报等待,这可以通过异步过程调用中断, (APC) 在同一线程上计划。 在 APC 内发出另一个阻止 Winsock 调用,中断同一线程上正在进行的阻止 Winsock 调用将导致未定义的行为,并且永远不会由 Winsock 客户端尝试。
以下示例演示 了侦听 函数的使用。
#ifndef UNICODE
#define UNICODE
#endif
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
// Need to link with Ws2_32.lib
#pragma comment(lib, "ws2_32.lib")
int wmain()
    //----------------------
    // Initialize Winsock
    WSADATA wsaData;
    int iResult = 0;
    SOCKET ListenSocket = INVALID_SOCKET;
    sockaddr_in service;
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != NO_ERROR) {
        wprintf(L"WSAStartup() failed with error: %d\n", iResult);
        return 1;
    //----------------------
    // Create a SOCKET for listening for incoming connection requests.
    ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (ListenSocket == INVALID_SOCKET) {
        wprintf(L"socket function failed with error: %ld\n", WSAGetLastError());
        WSACleanup();
        return 1;
    //----------------------
    // The sockaddr_in structure specifies the address family,
    // IP address, and port for the socket that is being bound.
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = inet_addr("127.0.0.1");
    service.sin_port = htons(27015);
    iResult = bind(ListenSocket, (SOCKADDR *) & service, sizeof (service));
    if (iResult == SOCKET_ERROR) {
        wprintf(L"bind function failed with error %d\n", WSAGetLastError());
        iResult = closesocket(ListenSocket);
        if (iResult == SOCKET_ERROR)
            wprintf(L"closesocket function failed with error %d\n", WSAGetLastError());
        WSACleanup();
        return 1;
    //----------------------
    // Listen for incoming connection requests 
    // on the created socket
    if (listen(ListenSocket, SOMAXCONN) == SOCKET_ERROR)
        wprintf(L"listen function failed with error: %d\n", WSAGetLastError());
    wprintf(L"Listening on socket...\n");
    iResult = closesocket(ListenSocket);
    if (iResult == SOCKET_ERROR) {
        wprintf(L"closesocket function failed with error %d\n", WSAGetLastError());
        WSACleanup();
        return 1;
    WSACleanup();
    return 0;
有关使用侦听函数的另一个示例,请参阅与 Winsock 入门。

IrDA 套接字说明

  • 必须显式包含 Af_irda.h 头文件。
  • 积压工作参数 (以无提示方式) 基础服务提供商确定的合理值。 非法值被最接近的法律值所取代。 没有标准预配来找出实际的积压工作值。

    Windows Phone 8:Windows Phone 8 及更高版本上Windows Phone应用商店应用支持此函数。

    Windows 8.1和Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 及更高版本的 Windows 应用商店应用支持此函数。