unixdomaindatagramsocket.h 1.32 KB
// UnixDomainDatagramSocket은 UDS를 데이터그램 형식으로 사용하는 소켓 구현체다. QUdpSocket처럼 사용하도록 구현했다.
//
// 주의: 자동 변수 대신 new로 할당하라. 소멸자에서 열린 소켓을 닫고 만든 파일을 지우기 때문에 문제가 생길 수 있다.

#ifndef UNIXDOMAINDATAGRAMSOCKET_H
#define UNIXDOMAINDATAGRAMSOCKET_H

#include <QObject>
#include <QSocketNotifier>

class UnixDomainDatagramSocket : public QObject
{
    Q_OBJECT
public:
    explicit UnixDomainDatagramSocket(QObject *parent = Q_NULLPTR);
    ~UnixDomainDatagramSocket();

    bool open();
    bool bind(const QString &path);
    bool bind(const char *path);

    bool hasPendingDatagrams();
    qint64 pendingDatagramSize();
    qint64 readDatagram(QByteArray *datagram, QString *path = Q_NULLPTR);
    qint64 readDatagram(char *data, qint64 maxSize, QString *path = Q_NULLPTR);
    qint64 writeDatagram(const QByteArray &datagram, const QString &path);
    qint64 writeDatagram(const char *data, qint64 size, const QString &path);
    qint64 writeDatagram(const char *data, qint64 size, const char *path);

signals:
    void readyRead();

public slots:

private:
    int sockfd;
    QString boundPath;
    QSocketNotifier *notifier;

private slots:
    void emitReadyRead();
};

#endif // UNIXDOMAINDATAGRAMSOCKET_H