help on udp server error:java.net.SocketException: Operation not permitted
hunter
hanyh2004 at gmail.com
Sat Sep 17 01:15:49 EDT 2011
I write a udp server with netty.It accepts the heartbeat packet from clients
and update the status of clients stored in redis.
Now the ratio is about 1000 request/s.but it occausly reported excepion:
java.net.SocketException: Operation not permitted
at sun.nio.ch.DatagramChannelImpl.send0(Native Method)
at sun.nio.ch.DatagramChannelImpl.sendFromNativeBuffer(Unknown Source)
at sun.nio.ch.DatagramChannelImpl.send(Unknown Source)
at sun.nio.ch.DatagramChannelImpl.send(Unknown Source)
at
org.jboss.netty.channel.socket.nio.SocketSendBufferPool$PooledSendBuffer.transferTo(SocketSendBufferPool.java:243)
at
org.jboss.netty.channel.socket.nio.NioDatagramWorker.write0(NioDatagramWorker.java:545)
at
org.jboss.netty.channel.socket.nio.NioDatagramWorker.writeFromUserCode(NioDatagramWorker.java:462)
at
org.jboss.netty.channel.socket.nio.NioDatagramPipelineSink.eventSunk(NioDatagramPipelineSink.java:112)
at org.jboss.netty.channel.Channels.write(Channels.java:611)
at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:263)
at
org.jboss.netty.channel.socket.nio.NioDatagramChannel.write(NioDatagramChannel.java:236)
at
cn.doyo.net.server.online.HearbeatServerHandler.messageReceived(HearbeatServerHandler.java:54)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
at
org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
at
org.jboss.netty.channel.socket.nio.NioDatagramWorker.read(NioDatagramWorker.java:419)
at
org.jboss.netty.channel.socket.nio.NioDatagramWorker.processSelectedKeys(NioDatagramWorker.java:348)
at
org.jboss.netty.channel.socket.nio.NioDatagramWorker.run(NioDatagramWorker.java:261)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
the handler source :
public class HearbeatServerHandler extends SimpleChannelHandler {
...........
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
if (e.getMessage() instanceof HearbeatFrame) {
HeartbeatServer.udpCounter.getAndAdd(1); //counter
HearbeatFrame frame = (HearbeatFrame) e.getMessage();
switch (frame.getCmd()) {
case 1:
ChannelBuffer buf = ChannelBuffers.buffer(4);
int ts = (int) (System.currentTimeMillis() / 1000);
buf.writeInt(ts); //here is exception occurred place.!
e.getChannel().write(buf, e.getRemoteAddress());
break;
case 2:
if (frame.isValidate()) {
InetSocketAddress in = (InetSocketAddress) e
.getRemoteAddress();
String ip = in.getAddress().getHostAddress();
frame.setIp(ip);
StatusUpdateWorker worker = new StatusUpdateWorker(frame); //update
status
pool.execute(worker);
} else {
logger.log(Level.WARNING, "CMD:2,Frame is error");
}
break;
case 3:
if (frame.isValidate()) { // delete client
Jedis redis = RedisUtil.getRedis();
redis.srem("o-u", frame.getUid() + "");
redis.srem("o-c", frame.getGuid());
logger.info("Remove Uid from Online Set.Uid:"
+ frame.getGuid());
RedisUtil.returnRedis(redis);
} else {
logger.log(Level.WARNING, "CMD:3,Frame is error");
}
break;
default:
;
}
} else {
logger.log(Level.WARNING, "Unexpected udp packet");
}
}
--
View this message in context: http://netty-forums-and-mailing-lists.685743.n2.nabble.com/help-on-udp-server-error-java-net-SocketException-Operation-not-permitted-tp6803207p6803207.html
Sent from the Netty User Group mailing list archive at Nabble.com.
More information about the netty-users
mailing list