Parcourir la source

SO_REUSEADDR:端口复用,可以让n个套接字绑定在一个端口上

scbc.sat2 il y a 5 ans
Parent
commit
a90b49da0c
1 fichiers modifiés avec 6 ajouts et 1 suppressions
  1. 6 1
      SATService/SATService/SATTCPServer.cpp

+ 6 - 1
SATService/SATService/SATTCPServer.cpp

@@ -331,7 +331,12 @@ bool CSATTCPServer::_InitializeListenSocket(unsigned int port)
 	// 这里可以绑定任何可用的IP地址,或者绑定一个指定的IP地址 
 	ServerAddress.sin_addr.s_addr = htonl(INADDR_ANY);                      
 	//ServerAddress.sin_addr.s_addr = inet_addr(m_strIP.GetString());         
-	ServerAddress.sin_port = htons(port);                          
+	ServerAddress.sin_port = htons(port);        
+
+	// SO_REUSEADDR:端口复用,可以让n个套接字绑定在一个端口上;
+	// 将套接字属性设置为 SO_REUSEADDR (允许套接口和一个已在使用中的地址捆绑),可以解决绑定失败问题
+	BOOL bReuseaddr = TRUE;
+	setsockopt(m_pListenContext->m_Socket,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));
 
 	// 绑定地址和端口
 	if (SOCKET_ERROR == ::bind(m_pListenContext->m_Socket, (struct sockaddr *) &ServerAddress, sizeof(ServerAddress)))