在Linux系统下,使用SO_REUSEADDR选项可以避免这个问题。这个选项可以让多个socket共享同一个地址和端口号,来避免“地址已经在使用”的错误。在绑定socket前,先设置这个选项:
int reuse = 1;
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1) {
perror("setsockopt");
exit(1);
}
在Windows系统下,也有一个类似的选项SO_EXCLUSIVEADDRUSE,可以实现同样的功能。