IT分销/经销 数据库Informix

请教:调用informix的api函数后,api函数不返回问题

在调用informix的api后,调用堆栈如下,但就是不返回。导致调用阻塞。函数堆栈如下:WS2_32!WSARecv+0x65   WSOCK32!recv+0x31   isqlt09a!service1+0xd932   isqlt09a!service1+0xcaae   isqlt09a!ifx_int8cmp+0xe441   i... 显示全部
在调用informix的api后,调用堆栈如下,但就是不返回。导致调用阻塞。

函数堆栈如下:
WS2_32!WSARecv+0x65   
WSOCK32!recv+0x31   
isqlt09a!service1+0xd932   
isqlt09a!service1+0xcaae   
isqlt09a!ifx_int8cmp+0xe441   
isqlt09a!ifx_int8cmp+0x1aab9   
isqlt09a!ifx_int8cmp+0x14002   
isqlt09a!ifx_int8cmp+0x770e   
isqlt09a!ifx_int8cmp+0x193b   
isqlt09a!CheckOsInit+0x1819   
isqlt09a!CheckOsInit+0x18f7   
isqlt09a!CheckOsInit+0x1db   
isqlt09a!sqli_defprep_set+0x483a
isqlt09a!sqli_prep+0x454   
isqlt09a!sqli_prep+0x1a8   
isqlt09a!sqli_prep+0x3f   
………………
(注:省略部分为我调用informix的api的代码,该代码平时使用是没问题的,只在某些时候出现,怀疑是其他的地方问题导致)

请专家指点一下,不胜感激。谢谢!!

10月27日补充提问
非常感谢大家的回复,我都试过,但都没有得到想要的效果。
  
这个问题在用户那里偶尔重现,重现条件未知。
我希望:1.有办法能重现(能重现才能证明问题的根源再哪里);2.问题原因是什么;3.采取怎样的规避措施
收起
参与40

查看其它 39 个回答jillme 的回答

jillme jillme 课题专家组 CIO 某大型银行
估计你的程序中应该用到了SOCKET的通讯,你是用阻塞式的通讯还是非阻塞式的。
RECV时候,有没有考虑会是CSocket的缓冲区满了,Recv函数就是从这个缓存区中取出数据。当然,你也可以手动配置这个缓冲块的大小。使用setsockopt()设置SO_SNDBUF对象。再说你接受的字节数。如果在内部网络,一般你发多少就会收到多少。但是在网络环境不稳定的外网,有时TCP会把数据包分割开来给你发送出去(网速不稳定的时候经常如此)。你需要的是,接到数据后,判定一下数据包是否完整,是否需要继续等待接收。
一般的写法是,在数据包头前若干个字节包含了一个整包长度的int

当RECV接收到了 指定长度的包就可以停止了。
互联网服务 · 2010-11-04
浏览1207

回答者

jillme
CIO 某大型银行
评论395

jillme 最近回答过的问题

回答状态

  • 发布时间:2010-11-04
  • 关注会员:0 人
  • 回答浏览:1207
  • X社区推广