readyCount = selector.select() или всегда возвращает 0 по тайм-ауту. следующее: 1) моя программа связана с этой проблемой. 2) отладочная информация.
Пожалуйста, помогите.
Код: Выделить всё
//To reduce size, I skipped unrelated functions.
// Port 1515, buffer size 126
private void setupSocketConnOperations() throws MarisCommsException {
ServerSocketChannel serverChannel = null;
Selector selector = null;
try {
serverChannel = ServerSocketChannel.open();
selector = Selector.open();
serverChannel.configureBlocking(false);
int ops = serverChannel.validOps();
InetSocketAddress socktAddr = new InetSocketAddress( "localhost", 1515);
serverChannel.bind(socktAddr);
LoggerService.logSocket("Server socket bound on port " + socketPortNo);
serverChannel.register(selector, SelectionKey.OP_ACCEPT);
int readyCount = 0;
LoggerService.logSocket("About to enter infinite loop");
while (true) {
try{
readyCount = selector.select(5000); // with timeout, hang on 5000, and then always return 0. if no timeout, hang on forever at here
if (readyCount == 0) {
Thread.sleep(500);
continue;
}
Set readyKeys = selector.selectedKeys();
Iterator i = readyKeys.iterator();
IMarisCommsMessageProtocol commsMsgProtocol = new MarisCommsMessageProtocol(buffer_size);// 126
while (i.hasNext()) {
SelectionKey key = (SelectionKey) i.next();
i.remove();
if (key.isAcceptable()) {
try {
commsMsgProtocol.handleAccept(key);
}
catch (MarisCommsException e) {
LoggerService.logSocket("Failed to accept connection request from client: " + e.getMessage());
}
continue;
}
if (key.isValid() && key.isReadable()) {
try {
commsMsgProtocol.handleRead(key);
}
catch (MarisCommsException e) {
LoggerService.logSocket("Error during message read: " + e.getMessage());
}
}
if (key.isValid() && key.isWritable()) { ///TODO comment out msg sent
try {
commsMsgProtocol.handleWrite(key);
}
catch (MarisCommsException e) {
LoggerService.logSocket("Error during message write (Maris -> ICS: " + e.getMessage());
}
}
}
}catch (Exception e) {
Utility.handleException(e)
return;
}
finally {
}
}
}catch(Exception e2) {
}
}
Код: Выделить всё
ClassLoader.findNative(ClassLoader loader, String entryName) { //parameter: loader=null, entryName =Java_sun_nio_ch_WEPoll_wait
if (loader == null) {
//entryName=java_sun_nio_ch_WEPoll_wait
//return 0 from find(entryName),
//In debug express, BootLoader.getNativeLibraries().find(entryName) = 140708885261832
//When debug cursor at the following line, debug step with F5/F6/F7 will make debug cursor dispeared, and no way to control the debug.
return BootLoader.getNativeLibraries().find(entryName);
} else {
return loader.libraries.find(entryName);
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... on-forever