【问题标题】:manage pointer to socket files descriptor管理指向套接字文件描述符的指针
【发布时间】:2013-04-08 01:06:53
【问题描述】:

我想知道是否可以管理指向套接字 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 ,但我的代码给出了分段错误,所以我不确定这种方法是否正确或可能。 感谢您的建议

【问题讨论】:

    标签: c sockets pointers udp


    【解决方案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);
    

    【讨论】:

    • 这段代码不是c++吗?我从未见过“int *psock = new int;” ansi c中的这种类型的声明
    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2012-11-12
    相关资源
    最近更新 更多