| Index: net/socket/tcp_server_socket_libevent.cc
|
| diff --git a/net/socket/tcp_server_socket_libevent.cc b/net/socket/tcp_server_socket_libevent.cc
|
| index 904256a794953a9a13f29690636863cd717ff448..34b82833cbf0b0a207a174e34c751150bec42791 100644
|
| --- a/net/socket/tcp_server_socket_libevent.cc
|
| +++ b/net/socket/tcp_server_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.
|
|
|
| @@ -64,13 +64,11 @@ int TCPServerSocketLibevent::Listen(const IPEndPoint& address, int backlog) {
|
| return result;
|
| }
|
|
|
| - 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_INVALID_ARGUMENT;
|
|
|
| - int result = bind(socket_, addr, addr_len);
|
| + int result = bind(socket_, storage.addr, storage.addr_len);
|
| if (result < 0) {
|
| PLOG(ERROR) << "bind() returned an error";
|
| result = MapSystemError(errno);
|
| @@ -93,12 +91,10 @@ int TCPServerSocketLibevent::GetLocalAddress(IPEndPoint* address) const {
|
| DCHECK(CalledOnValidThread());
|
| DCHECK(address);
|
|
|
| - 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) < 0)
|
| + SockaddrStorage storage;
|
| + if (getsockname(socket_, storage.addr, &storage.addr_len) < 0)
|
| return MapSystemError(errno);
|
| - if (!address->FromSockAddr(addr, addr_len))
|
| + if (!address->FromSockAddr(storage.addr, storage.addr_len))
|
| return ERR_FAILED;
|
|
|
| return OK;
|
| @@ -132,11 +128,10 @@ int TCPServerSocketLibevent::Accept(
|
|
|
| int TCPServerSocketLibevent::AcceptInternal(
|
| scoped_ptr<StreamSocket>* socket) {
|
| - struct sockaddr_storage addr_storage;
|
| - socklen_t addr_len = sizeof(addr_storage);
|
| - struct sockaddr* addr = reinterpret_cast<struct sockaddr*>(&addr_storage);
|
| -
|
| - int new_socket = HANDLE_EINTR(accept(socket_, addr, &addr_len));
|
| + SockaddrStorage storage;
|
| + int new_socket = HANDLE_EINTR(accept(socket_,
|
| + storage.addr,
|
| + &storage.addr_len));
|
| if (new_socket < 0) {
|
| int net_error = MapSystemError(errno);
|
| if (net_error != ERR_IO_PENDING)
|
| @@ -145,7 +140,7 @@ int TCPServerSocketLibevent::AcceptInternal(
|
| }
|
|
|
| IPEndPoint address;
|
| - if (!address.FromSockAddr(addr, addr_len)) {
|
| + if (!address.FromSockAddr(storage.addr, storage.addr_len)) {
|
| NOTREACHED();
|
| if (HANDLE_EINTR(close(new_socket)) < 0)
|
| PLOG(ERROR) << "close";
|
| @@ -153,7 +148,7 @@ int TCPServerSocketLibevent::AcceptInternal(
|
| return ERR_FAILED;
|
| }
|
| scoped_ptr<TCPClientSocket> tcp_socket(new TCPClientSocket(
|
| - AddressList::CreateFromIPAddress(address.address(), address.port()),
|
| + AddressList(address),
|
| net_log_.net_log(), net_log_.source()));
|
| int adopt_result = tcp_socket->AdoptSocket(new_socket);
|
| if (adopt_result != OK) {
|
|
|