Listener ( Endpoint endpoint ) : myHandle(::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) { if ( myHandle < 0 ) { throw (Error(errno)); } ::sockaddr *const address = reinterpret_cast< ::sockaddr* >(&endpoint.data()); int status = ::bind( myHandle, address, sizeof(endpoint.data())); if ( status < 0 ) { close(myHandle); throw (Error(errno)); } status = ::listen(myHandle, SOMAXCONN); if ( status < 0 ) { close(myHandle); throw (Error(errno)); } }
Listener::Listener ( const Endpoint& name, int backlog ) : myHandle(::allocate()) { const ::sockaddr_in& address = name.data(); const int result = ::bind( handle(), (::sockaddr*)&address, sizeof(address) ); if ( result == SOCKET_ERROR ) { const int error = ::WSAGetLastError(); UNCHECKED_WIN32C_ERROR(bind, error); } if ( ::listen(handle(), backlog) == SOCKET_ERROR ) { const int error = ::WSAGetLastError(); UNCHECKED_WIN32C_ERROR(listen, error); } }
basic_endpoint(const Endpoint& endpoint) : impl_(endpoint.data(), endpoint.size(), endpoint.protocol().protocol()) { }