HP主机上“Address already in use”问题
我的socket通讯程序,在sco unix和aix均正常,但是放到hp主机上后,发现经常出现“Address already in use”的问题,对于setsockopt的参数reuse我已经设置,但就是还会在某些特殊情况下重启后台服务端时报错“Address already in use”,上来请教一下。服务端创建sock的程序段如下:
……
sock = socket( AF_INET, SOCK_STREAM, 0 );
if( sock < 0 ){
writeLog("Create socket error[%s]!", strerror(errno));
return( -1 );
}
on = 1;
if( setsockopt( sock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof( int ) ) < 0 ){
writeLog( "setsockopt SO_REUSEADDR error[%s]!", strerror(errno) );
return( -1 );
}
ling.l_onoff=1;
ling.l_linger=0;
if( setsockopt(sock,SOL_SOCKET,SO_LINGER,&ling,sizeof(ling))<0 )
{
writeLog( "setsockopt SO_LINGER error[%s]!", strerror(errno) );
close( sock );
return( -1 );
}
memset( &localaddr, 0, sizeof( localaddr ) );
localaddr.sin_family = AF_INET;
localaddr.sin_addr.s_addr = htonl( INADDR_ANY );
localaddr.sin_port = htons( port );
if( bind( sock, (struct sockaddr *)&localaddr, sizeof( struct sockaddr_in )
) < 0 ){
writeLog("Can't bind local address[%s]!", strerror(errno) );
return( -1 );
}
……
不知道是否是因为HP上特殊,有什么需要调整的地方?理论上应该不会这样才对。
另外一个状况:在HP的开发机上,一般是偶尔会有这种重启时的报错!但是,在我的生产环境,由于主机是双机热备,启动了MC双机软件,在这种机器环境下,每次我要重启服务,都会报错“Address already in use”,只能每次停下MC,然后再重启MC,再启动应用才能正常使用
知道坛子里有很多高人,希望能够得到指点,谢谢!
我的联系方式:3038178@qq.com
------解决方案--------------------setsockopt( sock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof( int )
SOL_SOCKET 貌似应该指明为 TCP 协议吧...
------解决方案--------------------
------解决方案--------------------我这里没有HP的server,只有Solaris的,所以爱莫能助哦
个人观点,还是建议楼主自己看一下HP的man,是不是有特殊要求,不要这样人云亦云...