同步SOCKET挂死问题,很急,请大侠出手!!!

10-03-18 irix
环境为JDK1.4 turboLinux 10.

在这个环境下发送消息到服务器,使用的是同步socket,设置了同步socket超时定时器,并catch了异常,如果服务器返回的响应消息中的checksum不对,那么会导致这个socket就挂死了,定时器超时也无法处理,也无法catch到任何异常。

目前在多台机器上得到证实,目前怀疑的问题有JDK和LINUX,不知道哪位大侠是否遇到过同样问题,请帮忙看看,非常急,多谢!!!

banq
2010-03-18 10:36
现在都使用NIO了,不使用同步Socket,是容易死锁啊。

irix
2010-03-18 10:52
老项目,没有出大问题,是不会修改的,呵呵。

从运行情况上看还没有导致有死锁发生过,除了这次因为服务器返回的响应中checksum不对导致问题。

banq
2010-03-18 10:56
2010年03月18日 10:52 "irix"的内容
这次因为服务器返回的响应中checksum不对导致问题

那你将checksum逻辑不要在当前线程运行,使用另外线程来检验。socket不会自己去进行checksum的

irix
2010-03-18 11:01
这个检查udp报文中的checksum是否正确,不是业务来做的,是JDK的native方法做的吧。

您的意思是在发送同步socket的线程里面,再创建一个线程,一个线程用来检验发送线程是否dead?

banq
2010-03-18 11:10
2010年03月18日 11:01 "irix"的内容
这个检查udp报文中的checksum是否正确,不是业务来做的,是JDK的native方法做的吧。

我表示怀疑,不是非常清楚,UDP应该自己不检查包正确性,是使用者来检查,因为UDP本身就不稳定。

liujian1979
2010-03-18 15:55
这个死锁问题应该是程序本身导致的,和系统和JDK关系不大。

猜你喜欢