Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
559d0850b70b0cd116861c09e65e6304330d739a
[simgrid.git] / src / mc / mc_server.h
1 /* Copyright (c) 2015. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #ifndef MC_SERVER_H
8 #define MC_SERVER_H
9
10 #include <xbt/misc.h>
11
12 SG_BEGIN_DECL()
13
14 #define MC_SERVER_ERROR 127
15
16 typedef struct s_mc_server s_mc_server_t, *mc_server_t;
17
18 extern mc_server_t mc_server;
19
20 /** Initialise MC server
21  *
22  * @param  PID of the model-checked process
23  * @param socket file descriptor for communication with the model-checked process
24  * @return 0 on success
25  */
26 int MC_server_init(pid_t pid, int socket);
27
28 /** Execute the MC server
29  *
30  *  @return Status code (can be used with `exit()`)
31  */
32 void MC_server_run(void);
33
34 SG_END_DECL()
35
36 #ifdef __cplusplus
37
38 struct s_mc_server {
39 private:
40   pid_t pid;
41   int socket;
42   struct pollfd fds[2];
43 public:
44   s_mc_server(pid_t pid, int socket);
45   void start();
46   void shutdown();
47   void exit();
48   void resume(mc_process_t process);
49   void loop();
50   void handle_events();
51 protected:
52   void handle_signals();
53   void handle_waitpid();
54   void on_signal(const struct signalfd_siginfo* info);
55 };
56
57 #endif
58
59 #endif