У меня есть программа, работающая на сервере, взаимодействующая с другой программой, работающей на клиенте. Они оба отправляют данные и файлы туда и обратно.
Я заметил, что всякий раз, когда есть socHandler.read () (функция для чтения данных, поступающих в сокет), он застревает в ожидании поступления данных.
Так выглядит функция.
int CSocHandler::read(char * inBuffer, INT64 iBytesToRead){
bool blReadMore=false;
int retVal = 0;
int iOutputPointer = 0;
do{
blReadMore = false;
if (iStartOfBuffer == iEndOfBuffer) { //Buffer empty
if (blClosed ) {
return -1;
}
iStartOfBuffer = 0;
iEndOfBuffer = 0;
size_t bufferRemaining = BUFFER_SIZE-iEndOfBuffer;
int bytesRecvd = recv( sock, &buffer[iEndOfBuffer], (int)iBytesToRead<bufferRemaining?iBytesToRead:bufferRemaining), 0 );
if ( bytesRecvd <= 0) {
close();
Yield();
return retVal;
}
}
} while(blReadMore);
return retVal;
}
Переменная sock является типом SOCKET и является глобальной переменной, определенной в другом месте. Как я могу установить параметры или сделать этот вызов recv () неблокирующим только для этого вызова функции и не влиять на другие функции?
Я полагаю, что это то место, где оно застревает в ожидании данных, и я хочу, чтобы оно истекло через X секунд.