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 じゃない時 } |
多分これでいいんだと思う|・ω・)
Comments