예제 #1
0
  void close(SctpChannelImpl channel, ChannelFuture future) {
    boolean connected = channel.isConnected();
    boolean bound = channel.isBound();
    try {
      channel.channel.close();
      cancelledKeys++;

      if (channel.setClosed()) {
        future.setSuccess();
        if (connected) {
          fireChannelDisconnected(channel);
        }
        if (bound) {
          fireChannelUnbound(channel);
        }

        cleanUpWriteBuffer(channel);
        fireChannelClosed(channel);
      } else {
        future.setSuccess();
      }
    } catch (Throwable t) {
      future.setFailure(t);
      fireExceptionCaught(channel, t);
    }
  }
예제 #2
0
  void writeFromUserCode(final SctpChannelImpl channel) {
    if (!channel.isConnected()) {
      cleanUpWriteBuffer(channel);
      return;
    }

    if (scheduleWriteIfNecessary(channel)) {
      return;
    }

    // From here, we are sure Thread.currentThread() == workerThread.

    if (channel.writeSuspended) {
      return;
    }

    if (channel.inWriteNowLoop) {
      return;
    }

    write0(channel);
  }