出现这样的错误可能有两个原因,第一是因为当前主机已经有服务器进程在调用bind和listen在监听我们的目标端口,如果我们在这时再次调用bind函数进行绑定的话,则会产生系统调用错误。第二个原因可能是因为我们所需要bind的目标端口是本机socket已经连接的端口。
解决方法:设置套接字SO_REUSEADDR,所有的TCP服务器都应当指定该选项。
指定方法:
int flag = 1;
if (setsockopt(listen_handle_, SOL_SOCKET, SO_REUSEADDR, (const char*)&flag, sizeof(flag)) < 0)
{
printf("socket setsockopt error=%d(%s)!!!\n", errno, strerror(errno));
exit(1);
}