首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

socket初始化在bind时,出现adress already in use

2012-02-06 
求教:socket初始化在bind时,出现adress already in use?socket初始化在bind时,出现adressalreadyinuse.请

求教:socket初始化在bind时,出现adress already in use?
socket初始化在bind时,出现adress   already   in   use.请问如何修改?
我用虚拟机下的红帽9GCC   编译运行的,用netstat查处于TIMEWAIT状态,执行多次也bind不上,不知道时什么原因?求教!


static   int
initialize_listen_socket(   usockaddr*   usaP,   int   port)
{
        int   listen_fd;
        int   i;

        memset(   usaP,   0,   sizeof(usockaddr)   );
        usaP-> sa.sa_family   =   AF_INET;        
        usaP-> sa_in.sin_addr.s_addr   =   htonl(   INADDR_ANY   );
        usaP-> sa_in.sin_port   =   htons(   port   );    

        listen_fd   =   socket(   usaP-> sa.sa_family,   SOCK_STREAM,   0   );  
        if   (   listen_fd   <   0   ){
perror(   "alarm:   socket "   );
return   -1;
        }
   
        (void)   fcntl(   listen_fd,   F_SETFD,   1   );    
        i   =   1;
        if   (   setsockopt(   listen_fd,SOL_SOCKET,   SO_REUSEADDR,   (char*)   &i,   sizeof(i)   )   <   0   )    
        {
perror(   "alarm:   setsockopt "   );
return   -1;
        }
 
        if   (   bind(   listen_fd,   &usaP-> sa,   sizeof(struct   sockaddr_in)   )   <   0   )    
        {
perror(   "alarm:   bind "   );
return   -1;
        }
   
        if   (   listen(   listen_fd,   1024   )   <   0   )    
        {
perror(   "alarm:   listen "   );
return   -1;
        }

        return   listen_fd;
}

[解决办法]
照理说设置了端口复用就可以了。你可以试一下其他系统,看看是否rh9的原因。
[解决办法]
1.首先,运行ps -aux |grep lsnr ,看一下是否有进程占用
2.有的话kill掉,就可以了
[解决办法]
lsof -i:22或者netstat -an|grep 22察看

热点排行