| 发表于: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; } |
|
|
|
|