Неблокирующий TCP сервер на С или С+

222
06 мая 2018, 20:25

Получил задание: "реализовать неблокирующий TCP сервер на С или С++". Как делать не понимаю от слова совсем. Прошу посоветовать книги по данной теме.

Answer 1

Для 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 */};
Answer 2

Стивенс, Феннер и Рудофф - "UNIX Разработка сетевых приложений"

READ ALSO
Бинарное дерево поиска: структуры

Бинарное дерево поиска: структуры

Вот задание: 1) преобразование структур в дерево поиска; Что такое дерево поиска, я понял, но подскажите,пожалуйста, как это реализовать, желательно...

216
добавление экземпляров класса в list С++

добавление экземпляров класса в list С++

Как создать список экземпляров класса в С++ с помощью list У меня есть класс Bus и Park

195
boost::asio websocket С++

boost::asio websocket С++

У меня есть такой код, он подключается к websocket серверу и отправляет сообщения, но при каждой отправки он создаёт новое подключение на сервере...

196