我可以更改连接套接字的sockaddr或如何准备两个套接字切换

时间:2015-07-21 13:16:13

标签: c++ sockets

首先,我的合作伙伴为我提供了一个IP,我使用套接字与此IP通信,下面是我的代码

SOCKADDR_IN target; 
target.sin_family = AF_INET; 
target.sin_port = htons (8081); 
target.sin_addr.s_addr = inet_addr ("192.168.0.102"); 

mThreadSocket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); //Create socket
if (mThreadSocket == INVALID_SOCKET)
{
    return ; 
}

//Try connecting...
if (connect(mThreadSocket, (SOCKADDR *)&target, sizeof(target)) == SOCKET_ERROR)
{
    LogTrace( TBCAF_TRACE_LEVEL_ERROR, FWARNING"Winsock started fail." );
    return ; //Couldn't connect
}
LogTrace(TBCAF_TRACE_LEVEL_4, FYELLOW"CCloudInterface: connected.");

u_long iMode=1;
ioctlsocket(mThreadSocket,FIONBIO,&iMode);

while(true)
{
    if (!process_receive())
        continue;
    if(!process_send())
        continue;   
    // above two function both use the socket "mThreadSocket"

}

上面的代码工作正常,但最近我的合作伙伴提供了两个IP,并说当一个人关闭时,我可以切换到另一个以避免通信丢失,但我应该做什么?

我应该在开头打开两个连接的套接字,并先使用一个套接字, 当第一个关闭时切换到另一个?

或者我应该只保持一个套接字打开,然后创建一个函数,例如调用ReConnect(),并在此functon更改套接字的IP?但是怎么做

感谢任何帮助,谢谢。

0 个答案:

没有答案