76 {
77 msg_handle_ = msg_handle;
78 if (!msg_handle_) {
79 return false;
80 }
81
82 receiver_ = receiver;
83 if (!receiver_) {
84 return false;
85 }
86 listened_port_ = port;
87 struct rlimit rt;
89 if (setrlimit(RLIMIT_NOFILE, &rt) == -1) {
90 return false;
91 }
92
93 listener_sock_ = socket(AF_INET, SOCK_DGRAM, 0);
94 if (listener_sock_ == -1) {
95 return false;
96 }
97 int opt = SO_REUSEADDR;
98 setsockopt(listener_sock_, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
99 setnonblocking(listener_sock_);
100
101 struct sockaddr_in serv_addr;
102 serv_addr.sin_family = PF_INET;
103 serv_addr.sin_port = htons((uint16_t)listened_port_);
104 serv_addr.sin_addr.s_addr = INADDR_ANY;
105 if (bind(listener_sock_, (struct sockaddr *)&serv_addr,
106 sizeof(struct sockaddr)) == -1) {
107 close(listener_sock_);
108 return false;
109 }
111 struct epoll_event ev;
112 ev.events = EPOLLIN | EPOLLET;
113 ev.data.fd = listener_sock_;
114 if (epoll_ctl(kdpfd_, EPOLL_CTL_ADD, listener_sock_, &ev) < 0) {
115 close(listener_sock_);
116 return false;
117 }
118 return true;
119}
constexpr int MAXEPOLLSIZE