📅  最后修改于: 2023-12-03 15:22:03.463000             🧑  作者: Mango
这个错误信息通常表示在执行 listen()
系统调用时,端口已经被占用。这可能是因为:
要解决这个错误,可以采取以下措施:
setsockopt()
系统调用设置 SO_REUSEADDR
选项,让该端口在程序退出后立即释放,供后续程序使用。以下是一个示例代码片段,展示了如何使用 setsockopt()
设置 SO_REUSEADDR
选项:
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
perror("socket failed");
return -1;
}
int reuse = 1;
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1) {
perror("setsockopt failed");
return -1;
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(5000);
addr.sin_addr.s_addr = INADDR_ANY;
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
perror("bind failed");
return -1;
}
if (listen(sock, SOMAXCONN) == -1) {
perror("listen failed");
return -1;
}
// accept and handle connections...
注意,使用 SO_REUSEADDR
选项可能会存在一些安全风险,应该仅在必要时才使用。