0

send() を使用してデータを 2 つの異なるソケットに同時に送信する必要があるため、ソケット udp ファイル記述子へのポインターを管理できるかどうか疑問に思っていました。

2 つのソケット (socket() setsocket() bind() connect()...) を作成する関数と、ソケットを変更する別の関数があります (1 つの条件が true の場合、この部分は書きません)。

  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 に答える