1

select(2)関数を使用して C のコードを確認しています。このコードでは、select 関数は、2 つのソケットのセットのいずれかの準備が整ったときに、0 以外の数値を返す必要があります。ただし、 selectの直前にソケットが宣言されていても、準備ができているファイル記述子を見つけることができません。別のタイムアウトを強制しようとしましたが、このコードは別のマシンで動作していたため、FD_SETSIZE は問題ないと思います。何が間違っているのですか?これはコードです:

 // Program sockets intialization
int cmd_sock = create_and_bind_socket(cmd_port_property(0,GET) ,&src_addr);
mc_sock = create_and_bind_socket(mcast_port_property(0,GET), &mc_addr); 
join_multicast_group(mc_sock,mc_addr_str, &mc_req);


int recv_len = 0;
int childs = 0;

struct timeval tv;
struct timeval *ptv = &tv;

if (!timeout) {

  ptv = NULL;

} else {

  ptv->tv_sec = timeout;
  ptv->tv_usec = 0;

}

fd_set readfds, safe;
fdmax = mc_sock;

// Add multicast and unicast sockets to set
FD_ZERO(&readfds);
FD_SET(cmd_sock, &readfds);
FD_SET(mc_sock, &readfds);

safe = readfds;

// Wait until some socket on the set is ready to be read 
while(select (FD_SETSIZE,&readfds,NULL,NULL,ptv))  { 
4

1 に答える 1