Mercurial > public > hey
annotate src/main.c @ 2:052cf5cf100a
handle server shutdown and print server time
author | Dennis <dennisconcepcionmartin@gmail.com> |
---|---|
date | Mon, 17 Jul 2023 19:11:53 +0100 |
parents | 58952f1fb8da |
children | 691358f944e8 |
rev | line source |
---|---|
2
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
1 #include <signal.h> |
0 | 2 #include <stdio.h> |
1
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
3 #include <stdlib.h> |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
4 #include <string.h> |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
5 #include <sys/types.h> |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
6 #include <sys/socket.h> |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
7 #include <netinet/in.h> |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
8 #include <arpa/inet.h> |
2
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
9 #include <time.h> |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
10 |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
11 |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
12 int socketfd; |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
13 |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
14 |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
15 void sig_handler(int sig_num) { |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
16 if (sig_num == 2) { |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
17 printf("\nClosing socket\n"); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
18 shutdown(socketfd, 2); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
19 exit(0); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
20 } |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
21 } |
1
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
22 |
0 | 23 |
24 int main() { | |
2
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
25 signal(SIGINT, sig_handler); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
26 socketfd = socket(AF_INET, SOCK_STREAM, 0); |
1
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
27 |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
28 if (socketfd == -1) { |
2
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
29 perror("socket: "); |
1
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
30 exit(1); |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
31 } |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
32 |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
33 struct sockaddr_in sin; |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
34 memset(&sin, 0, sizeof(sin)); |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
35 sin.sin_family = AF_INET; |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
36 sin.sin_addr.s_addr = inet_addr("127.0.0.1"); |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
37 sin.sin_port = htons(5050); |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
38 |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
39 if (bind(socketfd, (struct sockaddr*)&sin, sizeof(sin)) == -1) { |
2
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
40 perror("bind: "); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
41 exit(1); |
1
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
42 } |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
43 |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
44 if (listen(socketfd, 10) == -1) { |
2
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
45 perror("listen: "); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
46 exit(1); |
1
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
47 } |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
48 |
2
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
49 printf("Waiting for connections...\n"); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
50 char send_buffer[100]; |
1
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
51 |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
52 while (1) { |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
53 int connfd = accept(socketfd, (struct sockaddr*)NULL, NULL); |
2
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
54 |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
55 if (connfd == -1) { |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
56 perror("accept: \n"); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
57 exit(1); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
58 } |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
59 |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
60 time_t now = time(NULL); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
61 snprintf(send_buffer, sizeof(send_buffer), "Server time: %s\n", ctime(&now)); |
052cf5cf100a
handle server shutdown and print server time
Dennis <dennisconcepcionmartin@gmail.com>
parents:
1
diff
changeset
|
62 send(connfd, send_buffer, sizeof(send_buffer), 0); |
1
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
63 shutdown(connfd, 2); |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
64 } |
58952f1fb8da
minimal socket example
Dennis <dennisconcepcionmartin@gmail.com>
parents:
0
diff
changeset
|
65 |
0 | 66 return 0; |
67 } |