这个错误通常发生在网络编程中,是因为绑定(bind)函数中的地址已经被其他进程占用了。以下是一个可能的代码示例和解决方法:
// 创建socket
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
NSLog(@"Failed to create socket");
return;
}
// 设置服务器地址
struct sockaddr_in serverAddress;
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = INADDR_ANY;
serverAddress.sin_port = htons(8080);
// 绑定socket到地址
int bindResult = bind(sockfd, (struct sockaddr *)&serverAddress, sizeof(serverAddress));
if (bindResult == -1) {
NSLog(@"Error binding socket: %s", strerror(errno));
close(sockfd); // 关闭socket
return;
}
解决方法:
setsockopt函数设置SO_REUSEADDR选项,允许地址重用。在绑定之前调用以下代码:int reuse = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
lsof来查找正在使用的地址或端口,并关闭相应的进程。希望这能帮助到你解决问题。