
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_java_nio_ServerSocketChannelImpl__
#define __gnu_java_nio_ServerSocketChannelImpl__

#pragma interface

#include <java/nio/channels/ServerSocketChannel.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace nio
      {
          class NIOServerSocket;
          class ServerSocketChannelImpl;
      }
    }
  }
  namespace java
  {
    namespace net
    {
        class ServerSocket;
    }
    namespace nio
    {
      namespace channels
      {
          class SocketChannel;
        namespace spi
        {
            class SelectorProvider;
        }
      }
    }
  }
}

class gnu::java::nio::ServerSocketChannelImpl : public ::java::nio::channels::ServerSocketChannel
{

public: // actually protected
  ServerSocketChannelImpl(::java::nio::channels::spi::SelectorProvider *);
public:
  jint getNativeFD();
  void finalizer();
public: // actually protected
  void implCloseSelectableChannel();
  void implConfigureBlocking(jboolean);
public:
  ::java::nio::channels::SocketChannel * accept();
  ::java::net::ServerSocket * socket();
private:
  ::gnu::java::nio::NIOServerSocket * __attribute__((aligned(__alignof__( ::java::nio::channels::ServerSocketChannel)))) serverSocket;
  jboolean connected;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_nio_ServerSocketChannelImpl__
