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"); } }