Я делаю многопоточный TCP-сервер, когда я использую recv() в потоках, они не обновляют/не запускают/не запускают бесконечно (циклически), если recv() фактически получает некоторые данные.Тема не обновляется, но блокируется на recv()
Вот фрагмент кода изнутри цикла.
if(seconds < 15){
printf("%f seconds passed: \r", seconds);
if ((read_size = recv(sock , client_message , 512 , 0)) > 0)
{
//Send the message back to client
reply_message = client_message;
(void)write(sock, reply_message, strlen(reply_message));
}
}else{
// ... blah blah blah
}
Если я закомментировать внутренний IF заявление, нить работает & выходы Е() так быстро, как это возможно. Когда включен оператор IF, поток ожидает recv() и не обновляется (printf() не печатается), пока recv() не получил данные:/
Любые идеи?
Ну вот что он должен делать. Что вы ожидали от этого? – univerio
Он должен непрерывно распечатывать секунды, прошедшие до 15 секунд, одновременно получая данные. Однако, когда recv() используется, это не так, и другие условные операторы, основанные на переменной секунд, не выполняются из-за того, что recv() останавливает поток. – MissionGuy07
Вы хотите совместить 'select' с 1-секундным таймаутом с' recv'. Также вы хотите, чтобы сокет не блокировался. Также вам нужно обрабатывать короткие чтения ... – Nemo