MCPcopy Create free account
hub / github.com/FEX-Emu/FEX / InitializeServerSocket

Function InitializeServerSocket

Source/Tools/FEXServer/ProcessPipe.cpp:187–238  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

185void HandleSocketData(fasio::tcp_socket&);
186
187bool InitializeServerSocket(bool abstract) {
188 fextl::string ServerSocketName;
189 if (abstract) {
190 ServerSocketName = FEXServerClient::GetServerSocketName();
191 } else {
192 ServerSocketName = FEXServerClient::GetServerSocketPath();
193 // Unlink the socket file if it exists
194 // We are being asked to create a daemon, not error check
195 // We don't care if this failed or not
196 unlink(ServerSocketName.c_str());
197 }
198 auto Acceptor = fasio::tcp_acceptor::create(Reactor, abstract, ServerSocketName);
199 if (!Acceptor) {
200 LogMan::Msg::EFmt("Failed to create FEXServer socket: error {} ({})", errno, strerror(errno));
201 return false;
202 }
203
204 Acceptor->async_accept([](fasio::error ec, std::optional<fasio::tcp_socket> Socket) {
205 if (ec != fasio::error::success) {
206 if (ec == fasio::error::generic_errno) {
207 LogMan::Msg::EFmt("FEXServer failed to establish client connection: error {} ({})", errno, strerror(errno));
208 }
209 // Ignore error and wait for next connection
210 return fasio::post_callback::repeat;
211 }
212
213 int FD = Socket->FD;
214 ++NumClients;
215 Reactor.bind_handler(
216 pollfd {
217 .fd = FD,
218 .events = POLLIN | POLLPRI | POLLRDHUP,
219 .revents = 0,
220 },
221 [Socket = std::move(Socket).value()](fasio::error ec) mutable {
222 if (ec != fasio::error::success) {
223 close(Socket.FD);
224 --NumClients;
225 return fasio::post_callback::drop;
226 }
227 HandleSocketData(Socket);
228 // Wait for next data
229 return fasio::post_callback::repeat;
230 });
231
232 // Wait for next connection
233 return fasio::post_callback::repeat;
234 });
235
236 (abstract ? ServerAcceptor : ServerFSAcceptor) = std::move(Acceptor).value();
237 return true;
238}
239
240void SendEmptyErrorPacket(fasio::tcp_socket& Socket) {
241 FEXServerClient::FEXServerResultPacket Res {

Callers 1

mainFunction · 0.85

Calls 7

GetServerSocketNameFunction · 0.85
GetServerSocketPathFunction · 0.85
EFmtFunction · 0.85
closeFunction · 0.85
HandleSocketDataFunction · 0.85
async_acceptMethod · 0.80
bind_handlerMethod · 0.80

Tested by

no test coverage detected