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。现在它解决了这个问题。
我在使用 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。现在它解决了这个问题。