|
@@ -331,7 +331,12 @@ bool CSATTCPServer::_InitializeListenSocket(unsigned int port)
|
|
// 这里可以绑定任何可用的IP地址,或者绑定一个指定的IP地址
|
|
// 这里可以绑定任何可用的IP地址,或者绑定一个指定的IP地址
|
|
ServerAddress.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
ServerAddress.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
//ServerAddress.sin_addr.s_addr = inet_addr(m_strIP.GetString());
|
|
//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)))
|
|
if (SOCKET_ERROR == ::bind(m_pListenContext->m_Socket, (struct sockaddr *) &ServerAddress, sizeof(ServerAddress)))
|