WSAAccept return 大小不变

WSAAccept return size not changing

我在使用 WSAAccept 函数时遇到困难。我在 Windows Phone 平台上使用此功能。 MSDN 说 Windows Phone 支持此函数,但不幸的是,此函数从未 returns 我得到 addr 参数指向的 sockaddr 结构的正确长度。即使我传递了 ridicolouos 值,它在返回时也没有改变。

有没有人知道可以做些什么来解决这个问题,这种行为的原因是什么?

我将不胜感激任何帮助。

编辑 函数的用法是这样的:

sockaddr address;
int size = 28; //it is a max size of union in which it is stored address;

c=accept(s,&address,&size); //where s is the socket;

但是因为 Windows Phone 平台不支持接受,所以我有一个包装器:

SOCKET accept(
        SOCKET s,
        struct sockaddr *addr,
        int *addrlen
        )
    {
        return c = WSAAccept(s, addr, addrlen, NULL, NULL);
    }

您正在向 WSAAccept() 传递无效参数。如果套接字系列是 AF_INET,则必须将指针传递给 sockaddr_in,而不是 sockaddr。如果套接字系列是 AF_INET6,则必须传递指向 sockaddr_in6 的指针。在任何一种情况下,您都必须传递 addrlen 值,该值是 sockaddr_....

的真实大小
sockaddr_in address;
int size = sizeof(address);

c = accept(s, (sockaddr*)&address, &size);
if (c == INVALID_SOCKET)
{
    // failed, call WSAGetLastError() to find out why...
}

SOCKET accept(
        SOCKET s,
        struct sockaddr *addr,
        int *addrlen
        )
    {
        return WSAAccept(s, addr, addrlen, NULL, NULL);
    }

我通过在 accept 函数之后调用 getpeername 函数设法获得了正确的 addrlen。现在它解决了这个问题。