public DTLSTransport accept(TlsServer server, DatagramTransport transport) throws IOException {
    if (server == null) {
      throw new IllegalArgumentException("'server' cannot be null");
    }
    if (transport == null) {
      throw new IllegalArgumentException("'transport' cannot be null");
    }

    SecurityParameters securityParameters = new SecurityParameters();
    securityParameters.entity = ConnectionEnd.server;
    securityParameters.serverRandom = TlsProtocol.createRandomBlock(secureRandom);

    ServerHandshakeState state = new ServerHandshakeState();
    state.server = server;
    state.serverContext = new TlsServerContextImpl(secureRandom, securityParameters);
    server.init(state.serverContext);

    DTLSRecordLayer recordLayer =
        new DTLSRecordLayer(transport, state.serverContext, server, ContentType.handshake);

    // TODO Need to handle sending of HelloVerifyRequest without entering a full connection

    try {
      return serverHandshake(state, recordLayer);
    } catch (TlsFatalAlert fatalAlert) {
      recordLayer.fail(fatalAlert.getAlertDescription());
      throw fatalAlert;
    } catch (IOException e) {
      recordLayer.fail(AlertDescription.internal_error);
      throw e;
    } catch (RuntimeException e) {
      recordLayer.fail(AlertDescription.internal_error);
      throw new TlsFatalAlert(AlertDescription.internal_error);
    }
  }