Use sockaddr_storage for proper stack aligment (#2523)

This commit is contained in:
Joerg-Christian Boehme
2018-11-27 15:25:05 +01:00
committed by Aleksandar Fabijanic
parent f475069dec
commit 7fd34b5a62

View File

@@ -104,8 +104,8 @@ SocketImpl* SocketImpl::acceptConnection(SocketAddress& clientAddr)
{ {
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
char buffer[SocketAddress::MAX_ADDRESS_LENGTH]; sockaddr_storage buffer;
struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(buffer); struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(&buffer);
poco_socklen_t saLen = sizeof(buffer); poco_socklen_t saLen = sizeof(buffer);
poco_socket_t sd; poco_socket_t sd;
do do
@@ -502,8 +502,8 @@ int SocketImpl::sendTo(const SocketBufVec& buffers, const SocketAddress& address
int SocketImpl::receiveFrom(void* buffer, int length, SocketAddress& address, int flags) int SocketImpl::receiveFrom(void* buffer, int length, SocketAddress& address, int flags)
{ {
char abuffer[SocketAddress::MAX_ADDRESS_LENGTH]; sockaddr_storage abuffer;
struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(abuffer); struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(&abuffer);
poco_socklen_t saLen = sizeof(abuffer); poco_socklen_t saLen = sizeof(abuffer);
poco_socklen_t* pSALen = &saLen; poco_socklen_t* pSALen = &saLen;
int rc = receiveFrom(buffer, length, &pSA, &pSALen, flags); int rc = receiveFrom(buffer, length, &pSA, &pSALen, flags);
@@ -541,8 +541,8 @@ int SocketImpl::receiveFrom(void* buffer, int length, struct sockaddr** ppSA, po
int SocketImpl::receiveFrom(SocketBufVec& buffers, SocketAddress& address, int flags) int SocketImpl::receiveFrom(SocketBufVec& buffers, SocketAddress& address, int flags)
{ {
char abuffer[SocketAddress::MAX_ADDRESS_LENGTH]; sockaddr_storage abuffer;
struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(abuffer); struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(&abuffer);
poco_socklen_t saLen = sizeof(abuffer); poco_socklen_t saLen = sizeof(abuffer);
poco_socklen_t* pSALen = &saLen; poco_socklen_t* pSALen = &saLen;
int rc = receiveFrom(buffers, &pSA, &pSALen, flags); int rc = receiveFrom(buffers, &pSA, &pSALen, flags);
@@ -846,8 +846,8 @@ SocketAddress SocketImpl::address()
{ {
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
char buffer[SocketAddress::MAX_ADDRESS_LENGTH]; sockaddr_storage buffer;
struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(buffer); struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(&buffer);
poco_socklen_t saLen = sizeof(buffer); poco_socklen_t saLen = sizeof(buffer);
int rc = ::getsockname(_sockfd, pSA, &saLen); int rc = ::getsockname(_sockfd, pSA, &saLen);
if (rc == 0) if (rc == 0)
@@ -862,8 +862,8 @@ SocketAddress SocketImpl::peerAddress()
{ {
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
char buffer[SocketAddress::MAX_ADDRESS_LENGTH]; sockaddr_storage buffer;
struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(buffer); struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(&buffer);
poco_socklen_t saLen = sizeof(buffer); poco_socklen_t saLen = sizeof(buffer);
int rc = ::getpeername(_sockfd, pSA, &saLen); int rc = ::getpeername(_sockfd, pSA, &saLen);
if (rc == 0) if (rc == 0)