mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 01:37:00 +00:00
Some missing from merge.
Signed-off-by: Salja <salja2012@hotmail.de>
This commit is contained in:
parent
ec939a5bce
commit
f4be15a7af
1895 changed files with 160408 additions and 53601 deletions
|
|
@ -1,3 +1,5 @@
|
|||
// $Id: SOCK_Dgram.cpp 96985 2013-04-11 15:50:32Z huangh $
|
||||
|
||||
#include "ace/SOCK_Dgram.h"
|
||||
|
||||
#include "ace/Log_Category.h"
|
||||
|
|
@ -8,9 +10,6 @@
|
|||
#include "ace/OS_NS_ctype.h"
|
||||
#include "ace/os_include/net/os_if.h"
|
||||
#include "ace/Truncate.h"
|
||||
#if defined (ACE_HAS_ALLOC_HOOKS)
|
||||
# include "ace/Malloc_Base.h"
|
||||
#endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
|
||||
#if !defined (__ACE_INLINE__)
|
||||
# include "ace/SOCK_Dgram.inl"
|
||||
|
|
@ -66,16 +65,9 @@ ACE_SOCK_Dgram::recv (iovec *io_vec,
|
|||
return -1;
|
||||
else if (inlen > 0)
|
||||
{
|
||||
#if defined (ACE_HAS_ALLOC_HOOKS)
|
||||
ACE_ALLOCATOR_RETURN (io_vec->iov_base,
|
||||
static_cast<char*>(ACE_Allocator::instance()->malloc(sizeof(char) * inlen)),
|
||||
-1);
|
||||
#else
|
||||
ACE_NEW_RETURN (io_vec->iov_base,
|
||||
char[inlen],
|
||||
-1);
|
||||
#endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
|
||||
ssize_t rcv_len = ACE_OS::recvfrom (this->get_handle (),
|
||||
(char *) io_vec->iov_base,
|
||||
inlen,
|
||||
|
|
@ -84,11 +76,7 @@ ACE_SOCK_Dgram::recv (iovec *io_vec,
|
|||
&addr_len);
|
||||
if (rcv_len < 0)
|
||||
{
|
||||
#if defined (ACE_HAS_ALLOC_HOOKS)
|
||||
ACE_Allocator::instance()->free(io_vec->iov_base);
|
||||
#else
|
||||
delete [] (char *)io_vec->iov_base;
|
||||
#endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
io_vec->iov_base = 0;
|
||||
}
|
||||
else
|
||||
|
|
@ -116,26 +104,10 @@ ACE_SOCK_Dgram::recv (iovec *io_vec,
|
|||
|
||||
int
|
||||
ACE_SOCK_Dgram::shared_open (const ACE_Addr &local,
|
||||
int protocol_family,
|
||||
int ipv6_only)
|
||||
int protocol_family)
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::shared_open");
|
||||
bool error = false;
|
||||
#if defined (ACE_HAS_IPV6)
|
||||
int setting = !!ipv6_only;
|
||||
if (protocol_family == PF_INET6 &&
|
||||
-1 == ACE_OS::setsockopt (this->get_handle (),
|
||||
IPPROTO_IPV6,
|
||||
IPV6_V6ONLY,
|
||||
(char *)&setting,
|
||||
sizeof (setting)))
|
||||
{
|
||||
this->close();
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
ACE_UNUSED_ARG (ipv6_only);
|
||||
#endif /* defined (ACE_HAS_IPV6) */
|
||||
|
||||
if (local == ACE_Addr::sap_any)
|
||||
{
|
||||
|
|
@ -169,8 +141,7 @@ ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
|||
ACE_Protocol_Info *protocolinfo,
|
||||
ACE_SOCK_GROUP g,
|
||||
u_long flags,
|
||||
int reuse_addr,
|
||||
int ipv6_only)
|
||||
int reuse_addr)
|
||||
{
|
||||
if (ACE_SOCK::open (SOCK_DGRAM,
|
||||
protocol_family,
|
||||
|
|
@ -181,8 +152,7 @@ ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
|||
reuse_addr) == -1)
|
||||
return -1;
|
||||
else if (this->shared_open (local,
|
||||
protocol_family,
|
||||
ipv6_only) == -1)
|
||||
protocol_family) == -1)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
|
|
@ -194,8 +164,7 @@ int
|
|||
ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
||||
int protocol_family,
|
||||
int protocol,
|
||||
int reuse_addr,
|
||||
int ipv6_only)
|
||||
int reuse_addr)
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::open");
|
||||
|
||||
|
|
@ -217,8 +186,7 @@ ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
|||
return -1;
|
||||
else
|
||||
return this->shared_open (local,
|
||||
protocol_family,
|
||||
ipv6_only);
|
||||
protocol_family);
|
||||
}
|
||||
|
||||
// Here's the general-purpose constructor used by a connectionless
|
||||
|
|
@ -227,16 +195,14 @@ ACE_SOCK_Dgram::open (const ACE_Addr &local,
|
|||
ACE_SOCK_Dgram::ACE_SOCK_Dgram (const ACE_Addr &local,
|
||||
int protocol_family,
|
||||
int protocol,
|
||||
int reuse_addr,
|
||||
int ipv6_only)
|
||||
int reuse_addr)
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::ACE_SOCK_Dgram");
|
||||
|
||||
if (this->open (local,
|
||||
protocol_family,
|
||||
protocol,
|
||||
reuse_addr,
|
||||
ipv6_only) == -1)
|
||||
reuse_addr) == -1)
|
||||
ACELIB_ERROR ((LM_ERROR,
|
||||
ACE_TEXT ("%p\n"),
|
||||
ACE_TEXT ("ACE_SOCK_Dgram")));
|
||||
|
|
@ -248,8 +214,7 @@ ACE_SOCK_Dgram::ACE_SOCK_Dgram (const ACE_Addr &local,
|
|||
ACE_Protocol_Info *protocolinfo,
|
||||
ACE_SOCK_GROUP g,
|
||||
u_long flags,
|
||||
int reuse_addr,
|
||||
int ipv6_only)
|
||||
int reuse_addr)
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::ACE_SOCK_Dgram");
|
||||
if (this->open (local,
|
||||
|
|
@ -258,8 +223,7 @@ ACE_SOCK_Dgram::ACE_SOCK_Dgram (const ACE_Addr &local,
|
|||
protocolinfo,
|
||||
g,
|
||||
flags,
|
||||
reuse_addr,
|
||||
ipv6_only) == -1)
|
||||
reuse_addr) == -1)
|
||||
ACELIB_ERROR ((LM_ERROR,
|
||||
ACE_TEXT ("%p\n"),
|
||||
ACE_TEXT ("ACE_SOCK_Dgram")));
|
||||
|
|
@ -291,7 +255,7 @@ ACE_SOCK_Dgram::send (const iovec iov[],
|
|||
send_msg.msg_control = 0;
|
||||
send_msg.msg_controllen = 0;
|
||||
send_msg.msg_flags = 0;
|
||||
#elif !defined ACE_LACKS_SENDMSG
|
||||
#else
|
||||
send_msg.msg_accrights = 0;
|
||||
send_msg.msg_accrightslen = 0;
|
||||
#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */
|
||||
|
|
@ -308,28 +272,11 @@ ssize_t
|
|||
ACE_SOCK_Dgram::recv (iovec iov[],
|
||||
int n,
|
||||
ACE_Addr &addr,
|
||||
int flags,
|
||||
ACE_INET_Addr *to_addr) const
|
||||
int flags) const
|
||||
{
|
||||
ACE_TRACE ("ACE_SOCK_Dgram::recv");
|
||||
msghdr recv_msg;
|
||||
|
||||
#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG)
|
||||
union control_buffer {
|
||||
cmsghdr control_msg_header;
|
||||
#if defined (IP_RECVDSTADDR)
|
||||
u_char padding[CMSG_SPACE(sizeof (struct in_addr))];
|
||||
#elif defined (IP_PKTINFO)
|
||||
u_char padding[CMSG_SPACE(sizeof (struct in_pktinfo))];
|
||||
#endif
|
||||
#if defined (ACE_HAS_IPV6)
|
||||
u_char padding6[CMSG_SPACE(sizeof (struct in6_pktinfo))];
|
||||
#endif
|
||||
} cbuf;
|
||||
#else
|
||||
ACE_UNUSED_ARG (to_addr);
|
||||
#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */
|
||||
|
||||
recv_msg.msg_iov = (iovec *) iov;
|
||||
recv_msg.msg_iovlen = n;
|
||||
#if defined (ACE_HAS_SOCKADDR_MSG_NAME)
|
||||
|
|
@ -340,9 +287,9 @@ ACE_SOCK_Dgram::recv (iovec iov[],
|
|||
recv_msg.msg_namelen = addr.get_size ();
|
||||
|
||||
#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG)
|
||||
recv_msg.msg_control = to_addr ? &cbuf : 0;
|
||||
recv_msg.msg_controllen = to_addr ? sizeof (cbuf) : 0;
|
||||
#elif !defined ACE_LACKS_SENDMSG
|
||||
recv_msg.msg_control = 0 ;
|
||||
recv_msg.msg_controllen = 0 ;
|
||||
#else
|
||||
recv_msg.msg_accrights = 0;
|
||||
recv_msg.msg_accrightslen = 0;
|
||||
#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */
|
||||
|
|
@ -352,49 +299,6 @@ ACE_SOCK_Dgram::recv (iovec iov[],
|
|||
flags);
|
||||
addr.set_size (recv_msg.msg_namelen);
|
||||
addr.set_type (((sockaddr_in *) addr.get_addr())->sin_family);
|
||||
|
||||
#if defined (ACE_HAS_4_4BSD_SENDMSG_RECVMSG)
|
||||
if (to_addr) {
|
||||
this->get_local_addr (*to_addr);
|
||||
if (to_addr->get_type() == AF_INET) {
|
||||
#if defined (IP_RECVDSTADDR) || defined (IP_PKTINFO)
|
||||
for (cmsghdr *ptr = CMSG_FIRSTHDR (&recv_msg); ptr != 0; ptr = CMSG_NXTHDR (&recv_msg, ptr)) {
|
||||
#if defined (IP_RECVDSTADDR)
|
||||
if (ptr->cmsg_level == IPPROTO_IP &&
|
||||
ptr->cmsg_type == IP_RECVDSTADDR) {
|
||||
to_addr->set_address ((const char *)(CMSG_DATA (ptr)),
|
||||
sizeof (struct in_addr),
|
||||
0);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
if (ptr->cmsg_level == IPPROTO_IP &&
|
||||
ptr->cmsg_type == IP_PKTINFO) {
|
||||
to_addr->set_address ((const char *)&(((struct in_pktinfo *)(CMSG_DATA (ptr)))->ipi_addr),
|
||||
sizeof (struct in_addr),
|
||||
0);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#if defined (ACE_HAS_IPV6) && defined (IPV6_PKTINFO)
|
||||
else if (to_addr->get_type() == AF_INET6) {
|
||||
for (cmsghdr *ptr = CMSG_FIRSTHDR (&recv_msg); ptr != 0; ptr = CMSG_NXTHDR (&recv_msg, ptr)) {
|
||||
if (ptr->cmsg_level == IPPROTO_IPV6 && ptr->cmsg_type == IPV6_PKTINFO) {
|
||||
to_addr->set_address ((const char *)&(((struct in6_pktinfo *)(CMSG_DATA (ptr)))->ipi6_addr),
|
||||
sizeof (struct in6_addr),
|
||||
0);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif /* ACE_HAS_4_4BSD_SENDMSG_RECVMSG */
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
@ -430,14 +334,9 @@ ACE_SOCK_Dgram::send (const iovec iov[],
|
|||
#if defined (ACE_HAS_ALLOCA)
|
||||
buf = alloca (length);
|
||||
#else
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_ALLOCATOR_RETURN (buf, (buf *)
|
||||
ACE_Allocator::instance ()->malloc (length), -1);
|
||||
# else
|
||||
ACE_NEW_RETURN (buf,
|
||||
char[length],
|
||||
-1);
|
||||
# endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
#endif /* !defined (ACE_HAS_ALLOCA) */
|
||||
|
||||
char *ptr = buf;
|
||||
|
|
@ -450,11 +349,7 @@ ACE_SOCK_Dgram::send (const iovec iov[],
|
|||
|
||||
ssize_t result = ACE_SOCK_Dgram::send (buf, length, addr, flags);
|
||||
#if !defined (ACE_HAS_ALLOCA)
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_Allocator::instance ()->free (buf);
|
||||
# else
|
||||
delete [] buf;
|
||||
# endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
#endif /* !defined (ACE_HAS_ALLOCA) */
|
||||
return result;
|
||||
}
|
||||
|
|
@ -488,14 +383,9 @@ ACE_SOCK_Dgram::recv (iovec iov[],
|
|||
#if defined (ACE_HAS_ALLOCA)
|
||||
buf = alloca (length);
|
||||
#else
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_ALLOCATOR_RETURN (buf, (buf *)
|
||||
ACE_Allocator::instance ()->malloc (length), -1);
|
||||
# else
|
||||
ACE_NEW_RETURN (buf,
|
||||
char[length],
|
||||
-1);
|
||||
# endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
#endif /* !defined (ACE_HAS_ALLOCA) */
|
||||
|
||||
length = ACE_SOCK_Dgram::recv (buf, length, addr, flags);
|
||||
|
|
@ -520,11 +410,7 @@ ACE_SOCK_Dgram::recv (iovec iov[],
|
|||
}
|
||||
|
||||
#if !defined (ACE_HAS_ALLOCA)
|
||||
# ifdef ACE_HAS_ALLOC_HOOKS
|
||||
ACE_Allocator::instance ()->free (buf);
|
||||
# else
|
||||
delete [] buf;
|
||||
# endif /* ACE_HAS_ALLOC_HOOKS */
|
||||
#endif /* !defined (ACE_HAS_ALLOCA) */
|
||||
return length;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue