Mercurial
annotate seobeo/example.c @ 6:1e61008b9980
[Seobeo] Updated seobeo so that API is more opinionated. Added my webpage./build.sh
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Mon, 29 Sep 2025 16:00:44 -0700 |
| parents | 5695ef413be0 |
| children |
| rev | line source |
|---|---|
|
0
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
1 /* |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
2 ** server.c -- a stream socket server demo |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
3 */ |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
4 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
5 #include <stdio.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
6 #include <stdlib.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
7 #include <unistd.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
8 #include <errno.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
9 #include <string.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
10 #include <sys/types.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
11 #include <sys/socket.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
12 #include <netinet/in.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
13 #include <netdb.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
14 #include <arpa/inet.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
15 #include <sys/wait.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
16 #include <signal.h> |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
17 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
18 #define PORT "3490" // the port users will be connecting to |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
19 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
20 #define BACKLOG 10 // how many pending connections queue will hold |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
21 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
22 void sigchld_handler(int s) |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
23 { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
24 (void)s; // quiet unused variable warning |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
25 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
26 // waitpid() might overwrite errno, so we save and restore it: |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
27 int saved_errno = errno; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
28 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
29 while(waitpid(-1, NULL, WNOHANG) > 0); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
30 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
31 errno = saved_errno; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
32 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
33 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
34 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
35 // get sockaddr, IPv4 or IPv6: |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
36 void *get_in_addr(struct sockaddr *sa) |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
37 { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
38 if (sa->sa_family == AF_INET) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
39 return &(((struct sockaddr_in*)sa)->sin_addr); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
40 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
41 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
42 return &(((struct sockaddr_in6*)sa)->sin6_addr); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
43 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
44 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
45 int main(void) |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
46 { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
47 // listen on sock_fd, new connection on new_fd |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
48 int sockfd, new_fd; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
49 struct addrinfo hints, *servinfo, *p; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
50 struct sockaddr_storage their_addr; // connector's address info |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
51 socklen_t sin_size; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
52 struct sigaction sa; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
53 int yes=1; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
54 char s[INET6_ADDRSTRLEN]; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
55 int rv; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
56 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
57 memset(&hints, 0, sizeof hints); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
58 hints.ai_family = AF_INET; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
59 hints.ai_socktype = SOCK_STREAM; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
60 hints.ai_flags = AI_PASSIVE; // use my IP |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
61 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
62 if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
63 fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
64 return 1; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
65 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
66 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
67 // loop through all the results and bind to the first we can |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
68 for(p = servinfo; p != NULL; p = p->ai_next) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
69 if ((sockfd = socket(p->ai_family, p->ai_socktype, |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
70 p->ai_protocol)) == -1) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
71 perror("server: socket"); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
72 continue; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
73 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
74 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
75 if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
76 sizeof(int)) == -1) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
77 perror("setsockopt"); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
78 exit(1); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
79 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
80 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
81 if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
82 close(sockfd); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
83 perror("server: bind"); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
84 continue; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
85 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
86 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
87 break; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
88 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
89 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
90 freeaddrinfo(servinfo); // all done with this structure |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
91 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
92 if (p == NULL) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
93 fprintf(stderr, "server: failed to bind\n"); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
94 exit(1); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
95 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
96 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
97 if (listen(sockfd, BACKLOG) == -1) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
98 perror("listen"); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
99 exit(1); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
100 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
101 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
102 sa.sa_handler = sigchld_handler; // reap all dead processes |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
103 sigemptyset(&sa.sa_mask); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
104 sa.sa_flags = SA_RESTART; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
105 if (sigaction(SIGCHLD, &sa, NULL) == -1) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
106 perror("sigaction"); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
107 exit(1); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
108 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
109 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
110 printf("server: waiting for connections...\n"); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
111 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
112 while(1) { // main accept() loop |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
113 sin_size = sizeof their_addr; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
114 new_fd = accept(sockfd, (struct sockaddr *)&their_addr, |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
115 &sin_size); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
116 if (new_fd == -1) { |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
117 perror("accept"); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
118 continue; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
119 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
120 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
121 inet_ntop(their_addr.ss_family, |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
122 get_in_addr((struct sockaddr *)&their_addr), |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
123 s, sizeof s); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
124 printf("server: got connection from %s\n", s); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
125 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
126 char *yo = "HTTP/1.1 OK %s\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
127 "Content-Type: text/txt\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
128 "Content-Length: 13\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
129 "Connection: close\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
130 "\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
131 "Hello, world!"; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
132 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
133 if (!fork()) { // this is the child process |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
134 close(sockfd); // child doesn't need the listener |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
135 if (send(new_fd, |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
136 "HTTP/1.1 OK %s\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
137 "Content-Type: text/txt\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
138 "Content-Length: 13\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
139 "Connection: close\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
140 "\r\n" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
141 "Hello, world!" |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
142 , strlen(yo), 0) == -1) |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
143 perror("send"); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
144 close(new_fd); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
145 exit(0); |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
146 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
147 close(new_fd); // parent doesn't need this |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
148 } |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
149 |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
150 return 0; |
|
5695ef413be0
Initialized mono repo with bazels with few examples.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
151 } |