读书人

HP主机上“Address already in use”有

发布时间: 2012-05-15 14:35:29 作者: rapoo

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 协议吧...
[解决办法]

探讨
setsockopt( sock,TCP,SO_REUSEADDR,&on,sizeof( int )?

[解决办法]
我这里没有HP的server,只有Solaris的,所以爱莫能助哦

个人观点,还是建议楼主自己看一下HP的man,是不是有特殊要求,不要这样人云亦云...

读书人网 >UNIXLINUX

热点推荐