OpenSSLでタイムアウト付の最適なデータ読み込み処理

OpenSSLの SSH_read のタイムアウトつきのいいサンプルが見つからなかったので、試行錯誤して作ってみたよ|・ω・)ノ

   int n;
   char tmp[0x4000];
   struct timeval tv;
   fd_set fds, readfds;
   int ssl_fd;
   tv.tv_sec = NETOUT;//default の初期タイムアウト
   tv.tv_usec = 0;
   FD_ZERO(&readfds);
   if(https){
        ssl_fd=SSL_get_fd(ssl1);
        FD_SET(ssl_fd,&readfds);
        while(1){
            memcpy(&fds, &readfds, sizeof(fd_set));
            n = select(ssl_fd+1, &fds, NULL, NULL, &tv);
            if(n==0){
                return; // Timeout
            }
            if (SSL_pending(ssl1)>0||FD_ISSET(ssl_fd, &fds)) {
               n=SSL_read(ssl1,tmp,sizeof(tmp));
               if (n < 1) {
                 return;
              }
            }
            buffer->insert(buffer->end(), tmp, tmp + n);
            tv.tv_sec = 1; //2回目からは1秒
        }
    }
    else{
// https じゃない時
    }

多分これでいいんだと思う|・ω・)

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です