一个比较奇怪的问题?

qiweilaoda 2012-02-24 01:09:35
我有一台服务器,主要负责报文的接受与转发,通过套接字实现,基于tcp的短连接,服务器上运行一个windows服务,负责消息转发。该服务A实现如下功能,侦听客户端的数据报文,将其转发给另外一台服务器B,B处理该请求后将报文发给A,A收到消息后转发给客户端,其实服务A就起一个二传的作用。但是这个服务很奇怪,功能能够正常实现,但是运行到一定时间后,出现问题,能够正常收到客户端发送的报文,但是却发送不到服务器B。并且此时,服务器A不能通过TCP连接到任何服务器上,例如SQLSERVER的1433端口,此时用TELNET命令发现连不上任何服务器的任何端口,却能够正常收到来自客户端的报文。服务器A上消息转发服务转发后均closesocket了,netstat -s命令当前连接数也并不大,不知道为什么,向大家请教。并且此时如果重启服务A则一切恢复正常。
...全文
110 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldm4n 2012-02-24
  • 打赏
  • 举报
回复
netstat -ano | find "CLOSE_WAIT"
netstat -ano | find "FIN_WAIT"

看看有多少

实在不行,写个小程序,里面仅调用 socket 函数创建一个socket fd,然后close掉,在出现了无法连接的情况下,跑一下这个小程序,看看创建socket能不能正确完成,如果创建socket失败,就是socket资源已经耗尽了,更别谈什么连接的问题了
qiweilaoda 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oldm4n 的回复:]

A -> B 是固定的一个连接还是每次转发时都创建新连接?
客户端 -> A 是固定的连接还是每次都会创建新连接?
查一下网络状况中的 CLOSE_WAIT 或者 FIN_WAIT_1、FIN_WAIT_2 之类的有多少
看样子感觉是系统可用socket资源的问题,极像是没有随机socket用于作为客户端连接其他服务器了(telnet不了1433也许就是因为如此)
[/Quote]

我分析这个原因有点像
但是我查网络状态的时候看到当前连接数并不太大 100多的样子
oldm4n 2012-02-24
  • 打赏
  • 举报
回复
A -> B 是固定的一个连接还是每次转发时都创建新连接?
客户端 -> A 是固定的连接还是每次都会创建新连接?
查一下网络状况中的 CLOSE_WAIT 或者 FIN_WAIT_1、FIN_WAIT_2 之类的有多少
看样子感觉是系统可用socket资源的问题,极像是没有随机socket用于作为客户端连接其他服务器了(telnet不了1433也许就是因为如此)
qiweilaoda 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]

但是运行到一定时间后,出现问题,能够正常收到客户端发送的报文,但是却发送不到服务器B。
-----------------------
send失败?WSAGetLastError失败的原因是什么?

服务器A不能通过TCP连接到任何服务器上
-----------------------------
不能connect连接,失败的原因又是什么?

资源有泄露?socket或者其……
[/Quote]


症状就是服务运行的机器telnet serverip 端口号 连不上
其他机器可以连接
连数据库都连不上了
sqlserver 1433端口连不上
程序不报错
分析是tcp连接的问题
qiweilaoda 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaohuh421 的回复:]

这属于程序bug了
长时间运行出现问题,可能是某些变量溢出,或者说是内存分配导致bug(通常是由于new太多,内存碎片就很多,导致内存耗尽)
[/Quote]


不像是溢出
xiaohuh421 2012-02-24
  • 打赏
  • 举报
回复
这属于程序bug了
长时间运行出现问题,可能是某些变量溢出,或者说是内存分配导致bug(通常是由于new太多,内存碎片就很多,导致内存耗尽)
Eleven 2012-02-24
  • 打赏
  • 举报
回复
但是运行到一定时间后,出现问题,能够正常收到客户端发送的报文,但是却发送不到服务器B。
-----------------------
send失败?WSAGetLastError失败的原因是什么?

服务器A不能通过TCP连接到任何服务器上
-----------------------------
不能connect连接,失败的原因又是什么?

资源有泄露?socket或者其它句柄没有释放?端口被占用?or 其它?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧