java.nio.channels.SocketChannel.blockingLock()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(4.1k)|赞(0)|评价(0)|浏览(111)

本文整理了Java中java.nio.channels.SocketChannel.blockingLock()方法的一些代码示例,展示了SocketChannel.blockingLock()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。SocketChannel.blockingLock()方法的具体详情如下:
包路径:java.nio.channels.SocketChannel
类名称:SocketChannel
方法名:blockingLock

SocketChannel.blockingLock介绍

暂无

代码示例

代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby

@JRubyMethod(name = "accept")
public IRubyObject accept(ThreadContext context) {
  Ruby runtime = context.runtime;
  RubyTCPSocket socket = new RubyTCPSocket(runtime, runtime.getClass("TCPSocket"));
  try {
    RubyThread thread = context.getThread();
    while (true) {
      boolean ready = thread.select(this, SelectionKey.OP_ACCEPT);
      if (!ready) {
        // we were woken up without being selected...poll for thread events and go back to sleep
        context.pollThreadEvents();
      } else {
        SocketChannel connected = ssc.accept();
        if (connected == null) continue;
        connected.finishConnect();
        // Force the client socket to be blocking
        synchronized (connected.blockingLock()) {
          connected.configureBlocking(false);
          connected.configureBlocking(true);
        }
        // otherwise one key has been selected (ours) so we get the channel and hand it off
        socket.initSocket(runtime, new ChannelDescriptor(connected, newModeFlags(runtime, ModeFlags.RDWR)));
        return socket;
      }
    }
  } catch(IOException e) {
    throw SocketUtils.sockerr(runtime, "problem when accepting");
  }
}

代码示例来源:origin: org.jruby/jruby-core

@JRubyMethod(name = "accept")
public IRubyObject accept(ThreadContext context) {
  Ruby runtime = context.runtime;
  RubyTCPSocket socket = new RubyTCPSocket(runtime, runtime.getClass("TCPSocket"));
  try {
    RubyThread thread = context.getThread();
    while (true) {
      boolean ready = thread.select(this, SelectionKey.OP_ACCEPT);
      if (!ready) {
        // we were woken up without being selected...poll for thread events and go back to sleep
        context.pollThreadEvents();
      } else {
        SocketChannel connected = getServerSocketChannel().accept();
        if (connected == null) continue;
        connected.finishConnect();
        // Force the client socket to be blocking
        synchronized (connected.blockingLock()) {
          connected.configureBlocking(false);
          connected.configureBlocking(true);
        }
        // otherwise one key has been selected (ours) so we get the channel and hand it off
        socket.initSocket(newChannelFD(runtime, connected));
        return socket;
      }
    }
  } catch(IOException e) {
    throw runtime.newIOErrorFromException(e);
  }
}

代码示例来源:origin: org.jruby/jruby-complete

@JRubyMethod(name = "accept")
public IRubyObject accept(ThreadContext context) {
  Ruby runtime = context.runtime;
  RubyTCPSocket socket = new RubyTCPSocket(runtime, runtime.getClass("TCPSocket"));
  try {
    RubyThread thread = context.getThread();
    while (true) {
      boolean ready = thread.select(this, SelectionKey.OP_ACCEPT);
      if (!ready) {
        // we were woken up without being selected...poll for thread events and go back to sleep
        context.pollThreadEvents();
      } else {
        SocketChannel connected = getServerSocketChannel().accept();
        if (connected == null) continue;
        connected.finishConnect();
        // Force the client socket to be blocking
        synchronized (connected.blockingLock()) {
          connected.configureBlocking(false);
          connected.configureBlocking(true);
        }
        // otherwise one key has been selected (ours) so we get the channel and hand it off
        socket.initSocket(newChannelFD(runtime, connected));
        return socket;
      }
    }
  } catch(IOException e) {
    throw runtime.newIOErrorFromException(e);
  }
}

代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby

@JRubyMethod(name = "accept")
public IRubyObject accept(ThreadContext context) {
  Ruby runtime = context.runtime;
  RubyTCPSocket socket = new RubyTCPSocket(runtime, runtime.getClass("TCPSocket"));
  try {
    RubyThread thread = context.getThread();
    while (true) {
      boolean ready = thread.select(this, SelectionKey.OP_ACCEPT);
      if (!ready) {
        // we were woken up without being selected...poll for thread events and go back to sleep
        context.pollThreadEvents();
      } else {
        SocketChannel connected = getServerSocketChannel().accept();
        if (connected == null) continue;
        connected.finishConnect();
        // Force the client socket to be blocking
        synchronized (connected.blockingLock()) {
          connected.configureBlocking(false);
          connected.configureBlocking(true);
        }
        // otherwise one key has been selected (ours) so we get the channel and hand it off
        socket.initSocket(runtime, new ChannelDescriptor(connected, newModeFlags(runtime, ModeFlags.RDWR)));
        return socket;
      }
    }
  } catch(IOException e) {
    throw SocketUtils.sockerr(runtime, "problem when accepting");
  }
}

相关文章