| Index: net/udp/udp_socket_libevent.cc
|
| diff --git a/net/udp/udp_socket_libevent.cc b/net/udp/udp_socket_libevent.cc
|
| index f8ef7e3c69309e8242d8b0e6f0f57bdd70aafb72..13196d2b59e04bd2f54d1749cfdb444b582d58b0 100644
|
| --- a/net/udp/udp_socket_libevent.cc
|
| +++ b/net/udp/udp_socket_libevent.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -95,13 +95,11 @@ int UDPSocketLibevent::GetPeerAddress(IPEndPoint* address) const {
|
| return ERR_SOCKET_NOT_CONNECTED;
|
|
|
| if (!remote_address_.get()) {
|
| - struct sockaddr_storage addr_storage;
|
| - socklen_t addr_len = sizeof(addr_storage);
|
| - struct sockaddr* addr = reinterpret_cast<struct sockaddr*>(&addr_storage);
|
| - if (getpeername(socket_, addr, &addr_len))
|
| + SockaddrStorage storage;
|
| + if (getpeername(socket_, storage.addr, &storage.addr_len))
|
| return MapSystemError(errno);
|
| scoped_ptr<IPEndPoint> address(new IPEndPoint());
|
| - if (!address->FromSockAddr(addr, addr_len))
|
| + if (!address->FromSockAddr(storage.addr, storage.addr_len))
|
| return ERR_FAILED;
|
| remote_address_.reset(address.release());
|
| }
|
| @@ -117,13 +115,11 @@ int UDPSocketLibevent::GetLocalAddress(IPEndPoint* address) const {
|
| return ERR_SOCKET_NOT_CONNECTED;
|
|
|
| if (!local_address_.get()) {
|
| - struct sockaddr_storage addr_storage;
|
| - socklen_t addr_len = sizeof(addr_storage);
|
| - struct sockaddr* addr = reinterpret_cast<struct sockaddr*>(&addr_storage);
|
| - if (getsockname(socket_, addr, &addr_len))
|
| + SockaddrStorage storage;
|
| + if (getsockname(socket_, storage.addr, &storage.addr_len))
|
| return MapSystemError(errno);
|
| scoped_ptr<IPEndPoint> address(new IPEndPoint());
|
| - if (!address->FromSockAddr(addr, addr_len))
|
| + if (!address->FromSockAddr(storage.addr, storage.addr_len))
|
| return ERR_FAILED;
|
| local_address_.reset(address.release());
|
| }
|
| @@ -240,13 +236,11 @@ int UDPSocketLibevent::InternalConnect(const IPEndPoint& address) {
|
| if (rv < 0)
|
| return rv;
|
|
|
| - struct sockaddr_storage addr_storage;
|
| - size_t addr_len = sizeof(addr_storage);
|
| - struct sockaddr* addr = reinterpret_cast<struct sockaddr*>(&addr_storage);
|
| - if (!address.ToSockAddr(addr, &addr_len))
|
| + SockaddrStorage storage;
|
| + if (!address.ToSockAddr(storage.addr, &storage.addr_len))
|
| return ERR_FAILED;
|
|
|
| - rv = HANDLE_EINTR(connect(socket_, addr, addr_len));
|
| + rv = HANDLE_EINTR(connect(socket_, storage.addr, storage.addr_len));
|
| if (rv < 0)
|
| return MapSystemError(errno);
|
|
|
| @@ -393,41 +387,37 @@ int UDPSocketLibevent::InternalRecvFrom(IOBuffer* buf, int buf_len,
|
| int bytes_transferred;
|
| int flags = 0;
|
|
|
| - struct sockaddr_storage addr_storage;
|
| - socklen_t addr_len = sizeof(addr_storage);
|
| - struct sockaddr* addr = reinterpret_cast<struct sockaddr*>(&addr_storage);
|
| + SockaddrStorage storage;
|
|
|
| bytes_transferred =
|
| HANDLE_EINTR(recvfrom(socket_,
|
| buf->data(),
|
| buf_len,
|
| flags,
|
| - addr,
|
| - &addr_len));
|
| + storage.addr,
|
| + &storage.addr_len));
|
| int result;
|
| if (bytes_transferred >= 0) {
|
| result = bytes_transferred;
|
| - if (address && !address->FromSockAddr(addr, addr_len))
|
| + if (address && !address->FromSockAddr(storage.addr, storage.addr_len))
|
| result = ERR_FAILED;
|
| } else {
|
| result = MapSystemError(errno);
|
| }
|
| if (result != ERR_IO_PENDING)
|
| - LogRead(result, buf->data(), addr_len, addr);
|
| + LogRead(result, buf->data(), storage.addr_len, storage.addr);
|
| return result;
|
| }
|
|
|
| int UDPSocketLibevent::InternalSendTo(IOBuffer* buf, int buf_len,
|
| const IPEndPoint* address) {
|
| - struct sockaddr_storage addr_storage;
|
| - size_t addr_len = sizeof(addr_storage);
|
| - struct sockaddr* addr = reinterpret_cast<struct sockaddr*>(&addr_storage);
|
| -
|
| + SockaddrStorage storage;
|
| + struct sockaddr* addr = storage.addr;
|
| if (!address) {
|
| addr = NULL;
|
| - addr_len = 0;
|
| + storage.addr_len = 0;
|
| } else {
|
| - if (!address->ToSockAddr(addr, &addr_len)) {
|
| + if (!address->ToSockAddr(storage.addr, &storage.addr_len)) {
|
| int result = ERR_FAILED;
|
| LogWrite(result, NULL, NULL);
|
| return result;
|
| @@ -439,7 +429,7 @@ int UDPSocketLibevent::InternalSendTo(IOBuffer* buf, int buf_len,
|
| buf_len,
|
| 0,
|
| addr,
|
| - addr_len));
|
| + storage.addr_len));
|
| if (result < 0)
|
| result = MapSystemError(errno);
|
| if (result != ERR_IO_PENDING)
|
| @@ -448,12 +438,10 @@ int UDPSocketLibevent::InternalSendTo(IOBuffer* buf, int buf_len,
|
| }
|
|
|
| int UDPSocketLibevent::DoBind(const IPEndPoint& address) {
|
| - struct sockaddr_storage addr_storage;
|
| - size_t addr_len = sizeof(addr_storage);
|
| - struct sockaddr* addr = reinterpret_cast<struct sockaddr*>(&addr_storage);
|
| - if (!address.ToSockAddr(addr, &addr_len))
|
| + SockaddrStorage storage;
|
| + if (!address.ToSockAddr(storage.addr, &storage.addr_len))
|
| return ERR_UNEXPECTED;
|
| - int rv = bind(socket_, addr, addr_len);
|
| + int rv = bind(socket_, storage.addr, storage.addr_len);
|
| return rv < 0 ? MapSystemError(errno) : rv;
|
| }
|
|
|
|
|