2014-09-19 28 views
4

我繼承了一些所謂的TCP代碼:何時調用setsockopt? bind()和connect()之前?

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

該呼叫之前

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

毫不奇怪,這導致了信息:「地址已在使用」。只需交換呼叫順序即可解決問題。

這提出了一個問題:一般來說,在撥打bind()之前,是否應該撥打setsockopt()?在致電connect()之前?

回答

4

SO_REUSEADDR需要在bind()之前設置。但是,並非所有選項都需要在bind()之前設置,或者甚至在connect()之前設置。這實際上取決於所設置的特定選項,因此您必須在逐個選項的基礎上處理它們。

相關問題