问题:
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