您的位置:程序门 -> linux/unix社区 -> 程序开发区



求教:socket初始化在bind时,出现adress already in use?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求教:socket初始化在bind时,出现adress already in use?[已结贴,结贴人:dream_y06]
发表于:2007-04-06 15:55:08 楼主
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;
}
发表于:2007-04-06 16:24:401楼 得分:10
照理说设置了端口复用就可以了。你可以试一下其他系统,看看是否rh9的原因。
发表于:2007-04-06 16:30:412楼 得分:5
1.首先,运行ps   -aux   ¦grep   lsnr   ,看一下是否有进程占用
2.有的话kill掉,就可以了
发表于:2007-04-07 09:59:043楼 得分:0
我觉得你是不是已经运行了一个进程了?
发表于:2007-04-07 12:07:514楼 得分:5
lsof   -i:22或者netstat   -an ¦grep   22察看
发表于:2007-04-10 10:02:345楼 得分:0
是网络配置的问题,已经连接上了,谢谢大家指点!


快速检索

最新资讯
热门点击