VxWorks下一种解决Telnet 23端口的挂住方法

问题:

     1.在TSP上运行的主机程序,如果通过telnet去监察程序的运行情况.如果没有正常关闭连接,则有时超过2小时之后,则会话丢失,再连接时,会出现"Sorry, session limit reached."的提示.不能登录.

      2.在VxWorks的TSP开发中,在telnet端口被别人或其它socket资源没有正常释放的情况下.如何去释放这些资源.

解决办法:

    1.在研究vxWorks操作系统的help时,发现有如下一些命令可以查到系统IO资源的使用情况,如inetstatShow,iosFdShow命令

    2.查看sockLib中库函数时,可以利用一些API根据系统的资源情况来解决这些问题.

    3.总体解决路径如下.通用查询sock=>找到其绑定的端口=>找到对端端口(tcp服务).=>关闭指定端口资源

    4.前提,VxWorks上运行的主机程序需要运行cli任务.

源程序如下:

typedef struct sockaddr t_INETSOCKADDR;

#ifdef T_VXWORKS
int sockTool_getpeerport( int sock )
{
    struct sockaddr_in sin;
    int len = sizeof(struct sockaddr_in);
    if ( sock < 0 )
            return -1;
    if ( getpeername( sock, (t_INETSOCKADDR*)&sin,&len ) == 0 )
    {
        printf("peer port %d/r/n",ntohs(sin.sin_port));
        return (ntohs(sin.sin_port));
    }
    return -1;
}

int sockTool_getlocalport( int sock )
{
    struct sockaddr_in sin;
    int len = sizeof(struct sockaddr_in);
    if (getsockname ( sock, (t_INETSOCKADDR*)&sin,&len ) == 0 )
    {
         printf("local port %d/r/n",ntohs(sin.sin_port));
         return (ntohs(sin.sin_port));
    }
    return -1;
}

int sockTool_closetcpsession(int con_port)
{
  int fd_max=FD_SETSIZE;
  int tmp_fd;
  for(tmp_fd =0 ;tmp_fd<fd_max;tmp_fd++)
  {
     if(sockTool_getlocalport(tmp_fd) == con_port)
     {
        if(sockTool_getpeerport(tmp_fd)>0)
        {
          printf("close fd %d/r/n",tmp_fd);
          shutdown(tmp_fd,2);
          close(tmp_fd);
          continue;
          //return 0;
        }
     }
  }
  return -1;
}
#endif
//2008/06/02 add ntl and other test code above

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值