Bredbandskollen CLI  1.2
Asynchronous network task engine
socketreceiver.h
1 // Copyright (c) 2018 IIS (The Internet Foundation in Sweden)
2 // Written by Göran Andersson <initgoran@gmail.com>
3 
4 #pragma once
5 
6 #include <sys/socket.h>
7 #include "serversocket.h"
8 class SocketConnection;
9 
21 class SocketReceiver : public ServerSocket {
22 public:
26  SocketReceiver(Task *task, int sock, pid_t peer_pid);
27 
29  virtual SocketConnection *incoming() override;
30 
32  int passSocketToPeer(int fd);
33 
35  ssize_t passMessageToPeer(const char *buf, size_t len);
36 
38  pid_t peerPid() const {
39  return peer;
40  }
41 
43  void peerDead() {
44  peer = 0;
45  closeMe();
46  }
47 private:
48  pid_t peer;
49 
50  // Used when passing file descriptors to peer:
51  struct msghdr fdpass_msg;
52  struct iovec empty_data;
53  char cmsgbuf[CMSG_SPACE(sizeof(int))];
54  struct cmsghdr *cmsg;
55 
56  // Used when sending data to peer:
57  struct msghdr parent_msg;
58  struct iovec msg_data;
59 };
Listen on a single socket for incoming connections.
Definition: serversocket.h:15
This class implements low-level socket connection operations. Inherit from it to implement protocols ...
Definition: socketconnection.h:47
Pass sockets and messages between processes.
Definition: socketreceiver.h:21
int passSocketToPeer(int fd)
Return 0 for success, errno on failure.
Definition: socketreceiver.cpp:82
pid_t peerPid() const
Return PID of the peer process.
Definition: socketreceiver.h:38
virtual SocketConnection * incoming() override
Return connection object if new client available, else return nullptr.
Definition: socketreceiver.cpp:32
void peerDead()
Stop communication with peer process and terminate as soon as possible.
Definition: socketreceiver.h:43
SocketReceiver(Task *task, int sock, pid_t peer_pid)
Definition: socketreceiver.cpp:8
ssize_t passMessageToPeer(const char *buf, size_t len)
Send data to peer. Return amount sent, or < 0 for error.
Definition: socketreceiver.cpp:94
void closeMe()
Tell the network engine that the connection should be closed.
Definition: socket.h:178
The purpose of a task is to manage socket connections, and/or to execute timers.
Definition: task.h:39