| Index: net/base/tcp_listen_socket.cc
|
| ===================================================================
|
| --- net/base/tcp_listen_socket.cc (revision 170891)
|
| +++ net/base/tcp_listen_socket.cc (working copy)
|
| @@ -76,6 +76,30 @@
|
| return s;
|
| }
|
|
|
| +SocketDescriptor TCPListenSocket::CreateAndBindAnyPort(const string& ip,
|
| + int* port) {
|
| + SocketDescriptor s = CreateAndBind(ip, 0);
|
| + if (s == kInvalidSocket)
|
| + return kInvalidSocket;
|
| + sockaddr_in addr;
|
| + socklen_t addr_size = sizeof(addr);
|
| + bool failed = getsockname(s, reinterpret_cast<struct sockaddr*>(&addr),
|
| + &addr_size) != 0;
|
| + if (addr_size != sizeof(addr))
|
| + failed = true;
|
| + if (failed) {
|
| + LOG(ERROR) << "Could not determine bound port, getsockname() failed";
|
| +#if defined(OS_WIN)
|
| + closesocket(s);
|
| +#elif defined(OS_POSIX)
|
| + close(s);
|
| +#endif
|
| + return kInvalidSocket;
|
| + }
|
| + *port = base::NetToHost16(addr.sin_port);
|
| + return s;
|
| +}
|
| +
|
| void TCPListenSocket::Accept() {
|
| SocketDescriptor conn = AcceptSocket();
|
| if (conn == kInvalidSocket)
|
|
|