Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6011
  • 博文数量: 2
  • 博客积分: 59
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 16:02
文章分类
文章存档

2012年(2)

我的朋友

分类: LINUX

2012-02-24 16:26:57

若需要使用的端口号被其它无用进程使用,可以用下面的方法将被占用的端口关闭
int closeSockFd(int port)
{
    struct rlimit lim;
    unsigned int i,val,exit=0;
    int pock;
    string spock;
    struct sockaddr_in serv,guest;
    socklen_t serv_len = sizeof(serv);
    struct stat buf;
    if (getrlimit(RLIMIT_NOFILE, &lim) < 0)
    {
        return -1;
    }
    if (lim.rlim_cur == RLIM_INFINITY)
   {
        lim.rlim_cur = 1024;
    }
    for (i = 3; i < lim.rlim_cur; i++)
    {
        fstat(i,&buf);
        if(S_ISSOCK(buf.st_mode))
        {
             getsockname(i,(struct sockaddr *)&serv, &serv_len);
             pock = ntohs(serv.sin_port);
             if(pock==port)
             {
                  val=fcntl(i,F_GETFD);
                  val |=FD_CLOEXEC;
                  if (fcntl(i,F_SETFD,val)==-1 && errno != EBADF)
                  {
                       return false;
                  }
                  exit=1;
             }
             serv.sin_port=0;
        }
    }
    if(exit==0)
    {
         return false;
    }
    return true;
}   
阅读(1677) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux原子操作如何转换成windows原子操作

给主人留下些什么吧!~~