如何在C中将客户端重新连接到不同的服务器IP而不打开新的套接字

myq*_* sh 0 c sockets

是否可以使用 C 在客户端套接字程序中关闭旧服务器 IP 连接并将其连接到新服务器 IP?我的客户端程序通过 SCTP 连接与服务器连接,在某些情况下我想断开与旧服务器的连接并连接到新服务器而不打开新套接字?客户端代码:

connSock = socket (AF_INET, SOCK_STREAM, IPPROTO_SCTP);
if (connSock == -1)
{
      perror("socket()");
      exit(1);
}

struct sctp_paddrparams params;
len = sizeof(params);

memset(&params, 0, sizeof(params));
if (getsockopt(connSock, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, &params, &len)) {
       perror("getsockopt");
       exit(1);
}
        
// set client address
struct sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
char* client_ip = get_our_ip();
localaddr.sin_addr.s_addr = inet_addr(client_ip) ;
localaddr.sin_port = 0; 
bind(connSock, (struct sockaddr *)&localaddr, sizeof(localaddr));

// set server address
bzero ((void *) &servaddr, sizeof (servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons (port); 
servaddr.sin_addr.s_addr = inet_addr(server_ip); 

ret = connect(connSock, (struct sockaddr *) &servaddr, sizeof (servaddr)); 
if (ret == -1)
{
    perror("connect()");
    close(connSock);
    exit(1);
}


if(due_to_some_condition_got_new_server_ip){
        ------------------------------> I have new server_ip2 to connect 
}
Run Code Online (Sandbox Code Playgroud)

use*_*751 7

这是不可能的。

打开一个新套接字。

即使有可能,也不会比打开一个新套接字更快。连接套接字的缓慢部分是您的计算机必须向另一台计算机发送数据包并获得回复。无论您连接同一个套接字还是不同的套接字,都会发生这种情况。

  • @Roi - 一些关于套接字的基础阅读,在OP自己的时间将是理解的必要基础。尽管并未禁止,但本网站实际上并不在教授任何主题的基础知识的范围内。简洁的答案虽然不是关于某个主题的详尽论述,但可以优雅地陈述事实。 (3认同)
  • @Roi我认为即使是问的人也知道它们是如何工作的:创建一个套接字,连接,发送和接收,并在完成后关闭。他们询问是否有一种无需创建新套接字即可进行连接的快捷方式。 (2认同)