0

我想知道是否可以管理指向套接字 udp 文件描述符的指针,因为我必须同时使用 send() 将数据发送到 2 个不同的套接字。

我有一个创建 2 个套接字的函数(socket() setsocket() bind() connect()...)和另一个更改套接字的函数(如果一个条件为真,但我不写这部分)

  void set_socket(){                                    
    socket00 = socket(AF_INET, SOCK_DGRAM, 0);
    socket01 = socket(AF_INET, SOCK_DGRAM, 0);
    ...
    setsocket();
    setsocket();
    ....
    ....
  }


  int change_socketfd (int fd) {    
    if (fd == socket01 ) {          
        return ( socket00 );
    }
    else if (fd == socket00 ) {
        return ( socket01 );
    }
  }

我可以有这样的指针吗?

    int *psock;
    psock=&change_socketfd(socket00);
    ris = send(*psock, datagram, sizeof(*datagram)+1 , 0);

我需要的是动态更改 socketfd ,但是我的代码给出了分段错误,所以我不确定这种方法是否正确或可能。感谢您的建议

4

1 回答 1

1

你这样做的方式是行不通的,因为&change_socketfd(socket00)它是给它一个返回值的地址,它只是暂时存在的。我不明白为什么这不能满足您的要求:

int psock;
psock = change_socketfd(socket00);
ris = send(psock, datagram, sizeof(*datagram)+1 , 0);

如果你真的需要它是一个指针,那么试试这个:

int *psock = malloc(sizeof(int*));
*psock = change_socketfd(socket00);
ris = send(*psock, datagram, sizeof(*datagram)+1 , 0);

...
//When you're finished with psock
free(psock);
于 2013-04-05T17:07:41.850 回答