日期:2014-05-16  浏览次数:20602 次

linux bind()问题
在linux下我用bind()函数总是出错,提示:地址已在使用,每次都这样,加了setsockopt也不好使,为什么阿。下面是我的代码


int sin_len;
int socket_info;
long save_file_flags;
int bind_rc;
int recv_rc;
int flag = 1;
int flag_len = sizeof(int);
struct sockaddr_in sin;

bzero(&sin, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_port = htons(12345);
sin_len = sizeof(struct sockaddr_in);

socket_info = socket(AF_INET, SOCK_DGRAM,0);
if(socket_info == -1){
perror("socket call failed");


if(setsockopt(socket_info, SOL_SOCKET, SO_REUSEADDR, (const char *)&flag, flag_len) < 0)
{
perror("setsockopt");
}

bind_rc = bind(socket_info,(struct sockaddr *)&sin, sizeof(sin));
if(bind_rc == -1)
{
perror("Migration_Infor_Receive socket bind failed");
}

------解决方案--------------------
端口被占用了

netstat -ano

------解决方案--------------------
netstat -a|grep 12345

看是什么进程冲突了?

最好换个临时的端口。每个应用程序之间端口不要冲突就行。
------解决方案--------------------
setsockopt(socket_info, SOL_SOCKET, SO_REUSEADDR, (const char *)&flag, flag_len)

说明这绝对不是TIME_WAIT的问题了,是确确实实你的端口被占用了。
netstat 查看一下。