我继承了一些名为:
的TCP代码bind(tcpSocket, (struct sockaddr*)&server_addr, sizeof(server_addr));
之前的
setsockopt(tcpSocket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
毫不奇怪,这导致了消息:“地址已在使用中”。简单地交换调用顺序解决了问题。
这提出了一个问题:一般来说,在致电setsockopt()
之前是否应该拨打bind()
?在致电connect()
之前?
答案 0 :(得分:5)
SO_REUSEADDR
需要在bind()
之前设置。但是,并非所有选项都需要在bind()
之前设置,或者甚至在connect()
之前设置。这实际上取决于所设置的具体选项,因此您必须逐个选项地处理它们。