Получил задание: "реализовать неблокирующий TCP сервер на С или С++". Как делать не понимаю от слова совсем. Прошу посоветовать книги по данной теме.
Для Windows:
unsigned long non_block = 1;
ioctlsocket(sd, FIONBIO, &non_block);
Для Linux:
int flags;
if(-1 == (flags = fcntl(sd, F_GETFL)))
flags = 0;
return fcntl(sd, F_SETFL, flags | O_NONBLOCK);
Для Unix-based ОС:
int set_nonblock(int sd) {
int flags;
#ifdef O_NONBLOCK
if (-1 == (flags = fcntl(sd, F_GETFL, 0)))
flags = 0;
return fcntl(sd, F_SETFL, flags | O_NONBLOCK);
#else
flags = 1;
return ioctl(sd, FIONBIO, &flags);
#endif // O_NONBLOCK
}
Про сокеты Беркли: видео на YouTube, мне кажется, Вам пригодится.
Как делать не понимаю от слова совсем
Посмотрите иерархию классов в Java, это немного поможет с интерфейсами Ваших классов. Думаю, это может выглядеть как-то так:
Интерфейс:
class ISocket {
public:
virtual ~ISocket() = default;
// interface
virtual void open(...) = 0;
virtual bool isOpen() const noexcept = 0;
virtual void close() = 0;
virtual int descriptor() const noexcept = 0;
virtual bool bind(...) = 0;
virtual bool listen(...) = 0;
virtual ISocket* accept(...) = 0;
virtual void enableNonblockingMode() = 0;
// и.т.д
};
Базовый класс:
class CSocket : public ISocket { /* тут общая часть */};
TCP/UDP/SCTP/т.п.
class CTCPSocket : public CSocket { /* спец. для TCP */};
Стивенс, Феннер и Рудофф - "UNIX Разработка сетевых приложений"
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вот задание: 1) преобразование структур в дерево поиска; Что такое дерево поиска, я понял, но подскажите,пожалуйста, как это реализовать, желательно...
Как создать список экземпляров класса в С++ с помощью list У меня есть класс Bus и Park
У меня есть такой код, он подключается к websocket серверу и отправляет сообщения, но при каждой отправки он создаёт новое подключение на сервере...