UDP通信におけるselectの使い方。

recvfromを使えば受信は簡単にできるのですが、それでは
タイムアウトの設定ができないためselect関数も使って
タイムアウト機能を備えた書き方。
変数の型などは適当にしらべて見て下さい。

//タイムアウト時間設定
timeout.tv_sec = 10;
timeout.tv_usec = 0;
//selectでrfdsが書き換えられてしまうためrfds2にコピー
memcpy(&rfds2, &rfds, sizeof(fd_set));
if ((n = select(iSock + 1, &rfds2, NULL, NULL, &timeout)) < 0) {
  //selectのエラー
  printf("select:error\n");
}
//timeout時
if (n == 0) {
  printf("time out\n");
}
//上手くいったときはrecvfromをここで呼ぶ
if (FD_ISSET(iSock, &rfds2)) {
  n = recvfrom(iSock, &pBuf, sizeof(pBuf), 0,
     (struct sockaddr *)&clientAddr, &addrLen);
  if (n < 0) {
     perror("recvfrom() error\n");
  }
}