Netty SocketException:参数无效
我已经基于netty 4.0.32.Final编写了传输服务器 在极少数情况下,我会在Oracle Solaris 11.1 SPARC上遇到下一个错误:Netty SocketException:参数无效,netty,Netty,我已经基于netty 4.0.32.Final编写了传输服务器 在极少数情况下,我会在Oracle Solaris 11.1 SPARC上遇到下一个错误: Failed to set a channel option: [id: 0x970c09c4, /91.221.145.225:48986 => /0.0.0.0:0] io.netty.channel.ChannelException: java.net.SocketException: Invalid argument at io
Failed to set a channel option: [id: 0x970c09c4, /91.221.145.225:48986 => /0.0.0.0:0]
io.netty.channel.ChannelException: java.net.SocketException: Invalid argument
at io.netty.channel.socket.DefaultSocketChannelConfig.setReuseAddress(DefaultSocketChannelConfig.java:222)
at io.netty.channel.socket.DefaultSocketChannelConfig.setOption(DefaultSocketChannelConfig.java:113)
at io.netty.bootstrap.ServerBootstrap$ServerBootstrapAcceptor.channelRead(ServerBootstrap.java:239)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:93)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketException: Invalid argument
at sun.nio.ch.Net.setIntOption0(Native Method)
at sun.nio.ch.Net.setSocketOption(Net.java:356)
at sun.nio.ch.SocketChannelImpl.setOption(SocketChannelImpl.java:190)
at sun.nio.ch.SocketAdaptor.setBooleanOption(SocketAdaptor.java:271)
at sun.nio.ch.SocketAdaptor.setReuseAddress(SocketAdaptor.java:389)
at io.netty.channel.socket.DefaultSocketChannelConfig.setReuseAddress(DefaultSocketChannelConfig.java:220)
... 12 more
以下是选项[SO_REUSEADDR=true,TCP_NODELAY=true,SO_LINGER=-1,WRITE_BUFFER_LOW_WATER_MARK=10240,WRITE_BUFFER_HIGH_WATER_MARK=20480,MESSAGE_SIZE_ESTIMATOR=io.netty.channel。DefaultMessageSizeEstimator@350c136d]
我已经调查了sun.nio.ch.Net.setIntOption0(本机方法)的本机调用最终将导致setsockopt调用
在这里列出的文档中
其中写道:
埃因瓦尔
指定的选项在指定的套接字级别无效,或者套接字已关闭
因此,可能会引发“无效参数”错误,因为在我的应用程序尝试设置套接字选项时,套接字已关闭
我的调查正确吗?
如果是的话,是否有可能在网络代码中检测到这种情况,以防止这种错误,而不是调用选项集