Это пример моего кода.Я создал два сокета, открыл два порта и пытался принимать соединения.Все мои файловые дескрипторы установлены на NONBLOCK
.
Дескриптор файла fd_client_serv
используется для приема HTTP-запросов GET через порт 8080.
Дескриптор файла fd_client_comm
используется для принятиякоманды на моем сервере от клиента в порту 9090.
Когда я отправляю запрос HTTP, я хочу прочитать запрос и просто напечатать первую строку.Но иногда это работает, а иногда нет.Пока сервер работает, я использую curl для отправки запроса.Иногда сервер продолжает печатать сообщение, а иногда нет.Я предполагаю, что есть проблема с двойной accepting
.
Не могли бы вы мне помочь?
while(1)
{
if((fd_client_serv = accept(fd_serv, (struct sockaddr *) &client_serv_addr, &sin_len_serv)) != -1)
{
new_fd = fd_client_serv;
fd_set_blocking(new_fd, 0);
}
if((fd_client_comm = accept(fd_comm, (struct sockaddr *) &client_comm_addr, &sin_len_comm)) != -1)
{
temp = fd_client_comm;
fd_set_blocking(temp, 0);
}
if (temp != 0)
{
if (server_commands(fd_comm, temp, start_time) == 1)
break;
}
if (new_fd != 0)
{
i = 0;
while ((bytes_read = read(new_fd, &(message[i]), 1)) != -1)
{
if (message[i] == '\n')
break;
i++;
}
printf("%s\n", message);
write(new_fd, "return message", 14);
memset(message, 0, 100);
close(new_fd);
new_fd = 0;
}
}