1
- // Server side C/C++ program to demonstrate Socket
2
- // programming
1
+ // IPC implementation using sockets by TEAM 7
3
2
#include <netinet/in.h>
4
3
#include <stdio.h>
5
4
#include <stdlib.h>
12
11
#include <pthread.h>
13
12
#include <arpa/inet.h>
14
13
#include <time.h>
15
- #include "linked_list .h"
14
+ #include "list .h"
16
15
#include <unistd.h>
17
16
18
17
@@ -29,7 +28,7 @@ struct clientAddress {
29
28
30
29
struct ArrayList clientsList ;
31
30
32
- #define MESSAGE_QUEUE_DELAY 30000 // 10 ms in microseconds
31
+ #define MESSAGE_QUEUE_DELAY 30000 // 30 ms in microseconds
33
32
34
33
struct MessageQueue {
35
34
char * message ;
@@ -39,12 +38,11 @@ struct MessageQueue {
39
38
struct MessageQueue * messageQueue = NULL ;
40
39
pthread_mutex_t queueMutex = PTHREAD_MUTEX_INITIALIZER ;
41
40
42
- // Function to add a message to the message queue
43
41
void addToMessageQueue (const char * message ) {
44
42
pthread_mutex_lock (& queueMutex );
45
43
46
44
struct MessageQueue * newMessage = (struct MessageQueue * )malloc (sizeof (struct MessageQueue ));
47
- newMessage -> message = strdup (message ); // Duplicate the message to avoid memory issues
45
+ newMessage -> message = strdup (message );
48
46
newMessage -> next = NULL ;
49
47
50
48
if (messageQueue == NULL ) {
@@ -60,7 +58,6 @@ void addToMessageQueue(const char* message) {
60
58
pthread_mutex_unlock (& queueMutex );
61
59
}
62
60
63
- // Function to send a message from the message queue with a delay
64
61
void * sendMessageFromQueue (void * arg ) {
65
62
while (true) {
66
63
pthread_mutex_lock (& queueMutex );
@@ -71,16 +68,14 @@ void* sendMessageFromQueue(void* arg) {
71
68
72
69
pthread_mutex_unlock (& queueMutex );
73
70
74
- // Send the message
75
71
usleep (MESSAGE_QUEUE_DELAY );
76
72
send (server_fd , temp -> message , strlen (temp -> message ), 0 );
77
- // Introduce a delay
78
73
79
74
free (temp -> message );
80
75
free (temp );
81
76
} else {
82
77
pthread_mutex_unlock (& queueMutex );
83
- usleep (1000 ); // Sleep for 1 ms if the queue is empty
78
+ usleep (1000 );
84
79
}
85
80
}
86
81
}
@@ -89,7 +84,7 @@ void handle_sigint(int sig) {
89
84
printf ("Received SIGINT. Closing server...\n" );
90
85
close (server_fd );
91
86
deleteAll (& clientsList );
92
- // Free the message queue
87
+
93
88
while (messageQueue != NULL ) {
94
89
struct MessageQueue * temp = messageQueue ;
95
90
messageQueue = messageQueue -> next ;
@@ -202,7 +197,7 @@ void* handle_client(void* client) {
202
197
203
198
}
204
199
205
- // Close the connected socket for this client
200
+ // сlose the connected socket for this client
206
201
close (new_socket );
207
202
free (clientArgs -> client_socket );
208
203
return NULL ;
0 commit comments