何时调用setsockopt?是在bind()和connect()之前吗?

9

我继承了一些调用以下TCP代码:

bind(tcpSocket, (struct sockaddr*)&server_addr, sizeof(server_addr));

在调用之前

setsockopt(tcpSocket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));

毫不奇怪,这会导致出现“地址已在使用”的消息。只需要交换调用的顺序就可以解决问题。
这引发了一个问题:通常,在调用bind()之前应该先调用setsockopt()吗?还是在调用connect()之前?
1个回答

10

SO_REUSEADDR需要在bind()之前设置。然而,不是所有选项都需要在bind()甚至connect()之前设置。这实际上取决于被设置的具体选项,所以你必须根据每个选项分别处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接