diff --git a/Practice/01.11/data.h b/Practice/01.11/data.h
new file mode 100644
index 0000000..ae8a441
--- /dev/null
+++ b/Practice/01.11/data.h
@@ -0,0 +1,12 @@
+#define DATA "\
+
+
+
+
+
+ Document title>
+ head>
+
+
+ body> < / html >
+ "
\ No newline at end of file
diff --git a/Practice/01.11/inet.c b/Practice/01.11/inet.c
new file mode 100644
index 0000000..2c69301
--- /dev/null
+++ b/Practice/01.11/inet.c
@@ -0,0 +1,146 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define FIN "exit"
+#define FINS "exit_s"
+#define FINC "exit_c"
+#define BUF 1024
+#define DATA "Answer"
+#define GET "GET"
+#define HTTPOK "HTTP/1.1 200 OK\n\n"
+#define INDEX "index.html"
+// #include "data.h"
+
+void session(int msgsock)
+{
+ int sock;
+ socklen_t length;
+ struct sockaddr_in server;
+ char ibuf[BUF];
+ char obuf[BUF];
+ int rval, sval;
+ int fd, offt;
+ do
+ {
+ memset(ibuf, 0, BUF);
+ if ((rval = read(msgsock, ibuf, 1024)) == -1)
+ perror("reading stream message");
+ dprintf(1, "-[%d]\n", rval);
+ if (rval == 0)
+ printf("Connection finished\n");
+ else
+ {
+ dprintf(1, "[%s]\n", ibuf);
+ memset(obuf, 0, BUF);
+ if (!strncmp(ibuf, GET, 3))
+ {
+#ifdef INDEX
+ strcpy(obuf, HTTPOK);
+ offt = strlen(obuf);
+ fd = open(INDEX, O_RDONLY);
+ read(fd, obuf + offt, BUF - offt);
+ close(fd);
+#else
+ strcpy(obuf, DATA1);
+#endif
+ }
+ else
+ {
+ strcpy(obuf, DATA);
+ }
+ sval = send(msgsock, obuf, strlen(obuf), 0);
+ dprintf(1, "Sent [%d]\n", sval);
+ }
+ } while ((rval > 0) && (strncmp(ibuf, GET, 3)));
+ exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+ int sock;
+ socklen_t length;
+ struct sockaddr_in server;
+ int msgsock;
+ pid_t pid;
+ const int enable = 1;
+
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock == -1)
+ {
+ perror("opening stream socket");
+ exit(1);
+ }
+ if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)) < 0)
+ exit(2);
+ server.sin_family = AF_INET;
+ server.sin_addr.s_addr = htonl(INADDR_ANY);
+ if (argc == 2)
+ server.sin_port = htons(atoi(argv[1]));
+ else
+ server.sin_port = 0;
+
+ if (bind(sock, (struct sockaddr *)&server, sizeof server) == -1)
+ {
+ perror("binding stream socket");
+ exit(1);
+ }
+
+ length = sizeof server;
+ if (getsockname(sock, (struct sockaddr *)&server, &length) == -1)
+ {
+ perror("getting socket name");
+ exit(1);
+ }
+ printf("Socket port %d\n", ntohs(server.sin_port));
+
+ listen(sock, 5);
+ pid_t cpid;
+ do
+ {
+ if ((msgsock = accept(sock, (struct sockaddr *)NULL, (socklen_t *)NULL)) == -1)
+ perror("accept");
+ else
+ {
+ cpid = fork();
+ if (cpid == 0)
+ {
+ session(msgsock);
+ }
+ }
+ close(msgsock);
+ } while (1);
+ /*
+ do {
+ if ((msgsock = accept(sock,(struct sockaddr *) NULL,(socklen_t *) NULL)) == -1)
+ perror("accept");
+ else
+ do {
+ memset(ibuf, 0, BUF);
+ if ((rval = read(msgsock, ibuf, 1024)) == -1) perror("reading stream message");
+ dprintf(1, "-[%d]\n", rval);
+ if (rval == 0) printf("Connection finished\n");
+ else{
+ dprintf(1, "[%s]\n", ibuf);
+ memset(obuf, 0, BUF);
+ if (!strncmp(ibuf, GET, 3)){
+ strcpy(obuf, DATA1);
+ }else{
+ strcpy(obuf, DATA);
+ }
+ sval = send(msgsock, obuf, strlen(obuf), 0);
+ dprintf(1, "Sent [%d]\n", sval);
+ }
+ } while ((rval > 0) && (strncmp(ibuf, GET, 3)));
+ close(msgsock);
+ } while (strcmp(ibuf, FIN))
+ */
+ exit(0);
+}
diff --git a/Practice/01.11/o_app b/Practice/01.11/o_app
new file mode 100755
index 0000000..11469fd
Binary files /dev/null and b/Practice/01.11/o_app differ
diff --git a/Practice/01.11/onLess.c b/Practice/01.11/onLess.c
new file mode 100644
index 0000000..07ecbbf
--- /dev/null
+++ b/Practice/01.11/onLess.c
@@ -0,0 +1,26 @@
+#include
+#include
+#include
+
+int main(int argc, char *argv[])
+{
+ DIR *dir;
+ struct dirent *entry;
+ if (argc > 1)
+ dir = opendir(argv[1]);
+ else
+ dir = opendir("/");
+ if (!dir)
+ {
+ perror("diropen");
+ return 1;
+ };
+ while ((entry = readdir(dir)) != NULL)
+ {
+ printf("%d - %s [%d] %d\n",
+ entry->d_ino, entry->d_name, entry->d_type,
+ entry->d_reclen);
+ };
+ closedir(dir);
+ return 0;
+}
\ No newline at end of file
diff --git a/Practice/01.11/on_app1 b/Practice/01.11/on_app1
new file mode 100755
index 0000000..08a9822
Binary files /dev/null and b/Practice/01.11/on_app1 differ
diff --git a/Practice/01.11/on_app2 b/Practice/01.11/on_app2
new file mode 100755
index 0000000..001225f
Binary files /dev/null and b/Practice/01.11/on_app2 differ
diff --git a/Practice/01.11/on_less2.c b/Practice/01.11/on_less2.c
new file mode 100644
index 0000000..fd8a104
--- /dev/null
+++ b/Practice/01.11/on_less2.c
@@ -0,0 +1,29 @@
+#include
+#include
+#include
+#include
+#include
+
+int main(int argc, char *argv[])
+{
+
+ struct dirent **namelist;
+ int n;
+ char dir[255] = ".";
+
+ if (argc > 1)
+ strcpy(dir, argv[1]);
+ n = scandir(dir, &namelist, 0, alphasort);
+ if (n < 0)
+ perror("scandir");
+ else
+ {
+ while (n--)
+ {
+ printf("%s\n", namelist[n]->d_name);
+ free(namelist[n]);
+ }
+ free(namelist);
+ }
+ return 0;
+}
\ No newline at end of file
diff --git a/Practice/lecture23.10/app_server b/Practice/lecture23.10/app_server
new file mode 100755
index 0000000..0d42b8b
Binary files /dev/null and b/Practice/lecture23.10/app_server differ
diff --git a/Practice/lecture23.10/server.c b/Practice/lecture23.10/server.c
new file mode 100644
index 0000000..a509cac
--- /dev/null
+++ b/Practice/lecture23.10/server.c
@@ -0,0 +1,58 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define SOCK_PATH "tpf_unix_sock.server"
+
+int main(void)
+{
+ int server_sock, rc;
+ socklen_t len;
+ int bytes_rec = 0;
+ struct sockaddr_un server_sockaddr, peer_sock;
+ char buf[256];
+ memset(&server_sockaddr, 0, sizeof(struct sockaddr_un));
+ memset(buf, 0, 256);
+
+ server_sock = socket(AF_UNIX, SOCK_DGRAM, 0);
+ if (server_sock == -1)
+ {
+ perror("socket");
+ exit(1);
+ }
+
+ server_sockaddr.sun_family = AF_UNIX;
+ strcpy(server_sockaddr.sun_path, SOCK_PATH);
+ len = sizeof(server_sockaddr);
+ unlink(SOCK_PATH);
+ rc = bind(server_sock, (struct sockaddr *)&server_sockaddr, len);
+ if (rc == -1)
+ {
+ perror("bind");
+ close(server_sock);
+ exit(1);
+ }
+
+ printf("waiting to recvfrom...\n");
+ bytes_rec = recvfrom(server_sock, buf, 256, 0, (struct sockaddr *)&peer_sock, &len);
+ if (bytes_rec == -1)
+ {
+ perror("recv");
+ close(server_sock);
+ exit(1);
+ }
+ else
+ {
+ printf("DATA RECEIVED = %s\n", buf);
+ }
+
+ close(server_sock);
+
+ return 0;
+}
diff --git a/Practice/lecture23.10/socket.c b/Practice/lecture23.10/socket.c
new file mode 100644
index 0000000..44300d7
--- /dev/null
+++ b/Practice/lecture23.10/socket.c
@@ -0,0 +1,70 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define DATA "exit"
+
+int main(int argc, char *argv[])
+{
+ int sock;
+ socklen_t length;
+ struct sockaddr_in server;
+ int msgsock;
+ char buf[1024];
+ int rval;
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock == -1)
+ {
+ perror("opening stream socket");
+ exit(1);
+ }
+ server.sin_family = AF_INET;
+ server.sin_addr.s_addr = htoml(INADDR_ANY);
+ if(argc == 2){
+ server.sin_port = htons(atoi(argv[1]));
+ }
+ else{
+ server.sin_port = 0;
+ }
+ if(bind(sock, (struct sockaddr *) &server, sizeof server) == -1){
+ perror("binding stream socket");
+ exit(1);
+ }
+ length = sizeof server;
+ if(getsockname(sock,(struct sockaddr *) &server, &length) == -1){
+ perror("getting socket name");
+ exit(1);
+ }
+ printf("socket port %d\n", ntohs(server.sin_port));
+ listen(sock, 5);
+ do{
+ if ((msgsock = accept(sock, (struct sockaddr *)NULL, (socklen_t *)NULL)) == -1)
+ {
+ perror("accept");
+ }
+ else
+ do
+ {
+ memset(buf, 0, sizeof buf);
+ if ((rval = read(msgsock, buf, 1024)) == -1)
+ perror("reading stream message");
+ dprintf(1, "-[%d]\n", rval);
+ if (rval == 0)
+ {
+ printf("connecting finished\n");
+ }
+ else
+ {
+ dprintf(1, "[%s]\n", buf);
+ }
+ } while ((rval > 0) && (strcmp(buf, FIN)));
+ close(msgsock);
+
+ }while(strcmp(buf,FIN));
+ exit(0);
+}
diff --git a/Practice/sem25.10/c_inet.c b/Practice/sem25.10/c_inet.c
new file mode 100644
index 0000000..ead7ab0
--- /dev/null
+++ b/Practice/sem25.10/c_inet.c
@@ -0,0 +1,64 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+//./client_app stud*** "port"
+
+#define DATA "Hello, World!"
+
+int main(int argc, char *argv[])
+{
+ int sock;
+ struct sockaddr_in server;
+ struct hostent *hp;
+ char buf[1024];
+
+ if (argc < 3)
+ {
+ printf("c_inet hostname port [data]\n");
+ _exit(1);
+ }
+
+ if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
+ {
+ perror("opening stream socket");
+ exit(1);
+ }
+
+ hp = malloc(sizeof(struct hostent));
+
+ server.sin_family = AF_INET;
+ hp = gethostbyname(argv[1]);
+ if (hp == (struct hostent *)0)
+ {
+ fprintf(stderr, "%s: unknown host\n", argv[1]);
+ exit(2);
+ }
+ memcpy((char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length);
+ server.sin_port = htons(atoi(argv[2]));
+ if (connect(sock, (struct sockaddr *)&server, sizeof server) == -1)
+ {
+ perror("connecting stream socket");
+ exit(1);
+ }
+ getchar();
+ memset(buf, 0, 1024);
+ if (argc > 3)
+ {
+ printf("[%s]\n", argv[3]);
+ strcpy(buf, argv[3]);
+ }
+ else
+ {
+ strcpy(buf, DATA);
+ }
+ if (write(sock, buf, strlen(buf)) == -1)
+ perror("writing on stream socket");
+ close(sock);
+ exit(0);
+}
diff --git a/Practice/sem25.10/client_app b/Practice/sem25.10/client_app
new file mode 100755
index 0000000..9d720e9
Binary files /dev/null and b/Practice/sem25.10/client_app differ
diff --git a/Practice/sem25.10/s_inet.c b/Practice/sem25.10/s_inet.c
new file mode 100644
index 0000000..9a26127
--- /dev/null
+++ b/Practice/sem25.10/s_inet.c
@@ -0,0 +1,70 @@
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define FIN "exit"
+
+int main(int argc, char *argv[])
+{
+ int sock;
+ socklen_t length;
+ struct sockaddr_in server;
+ int msgsock;
+ char buf[1024];
+ int rval;
+
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock == -1)
+ {
+ perror("opening stream socket");
+ exit(1);
+ }
+
+ server.sin_family = AF_INET;
+ server.sin_addr.s_addr = htonl(INADDR_ANY);
+ if (argc == 2)
+ server.sin_port = htons(atoi(argv[1]));
+ else
+ server.sin_port = 0;
+
+ if (bind(sock, (struct sockaddr *)&server, sizeof server) == -1)
+ {
+ perror("binding stream socket");
+ exit(1);
+ }
+
+ length = sizeof server;
+ if (getsockname(sock, (struct sockaddr *)&server, &length) == -1)
+ {
+ perror("getting socket name");
+ exit(1);
+ }
+ printf("Socket port %d\n", ntohs(server.sin_port));
+
+ listen(sock, 5);
+ do
+ {
+ if ((msgsock = accept(sock, (struct sockaddr *)NULL, (socklen_t *)NULL)) == -1)
+ perror("accept");
+ else
+ do
+ {
+ memset(buf, 0, sizeof buf);
+ if ((rval = read(msgsock, buf, 1024)) == -1)
+ perror("reading stream message");
+ dprintf(1, "-[%d]\n", rval);
+ if (rval == 0)
+ printf("Connection finished\n");
+ else
+ {
+ dprintf(1, "[%s]\n", buf);
+ }
+ // if (!strcmp(buf,FIN)) {break;}
+ } while ((rval > 0) && (strcmp(buf, FIN)));
+ close(msgsock);
+ } while (strcmp(buf, FIN));
+ exit(0);
+}
diff --git a/Practice/sem25.10/server_app b/Practice/sem25.10/server_app
new file mode 100755
index 0000000..ac73a90
Binary files /dev/null and b/Practice/sem25.10/server_app differ
diff --git a/Practice/sem25.10/test.c b/Practice/sem25.10/test.c
new file mode 100644
index 0000000..e69de29
diff --git a/Practice/sock20.10.23/app_client b/Practice/sock20.10.23/app_client
new file mode 100755
index 0000000..c647da4
Binary files /dev/null and b/Practice/sock20.10.23/app_client differ
diff --git a/Practice/sock20.10.23/app_server b/Practice/sock20.10.23/app_server
new file mode 100755
index 0000000..f050949
Binary files /dev/null and b/Practice/sock20.10.23/app_server differ
diff --git a/Practice/sock20.10.23/c4.c b/Practice/sock20.10.23/c4.c
index 010362d..c09eab9 100644
--- a/Practice/sock20.10.23/c4.c
+++ b/Practice/sock20.10.23/c4.c
@@ -9,8 +9,19 @@
#include
#include
-#define errExit(msg) do { perror(msg); _exit(EXIT_FAILURE); } while (0)
-#define SerrExit(s,msg) do { close(s); perror(msg); _exit(EXIT_FAILURE); } while (0)
+#define errExit(msg) \
+ do \
+ { \
+ perror(msg); \
+ _exit(EXIT_FAILURE); \
+ } while (0)
+#define SerrExit(s, msg) \
+ do \
+ { \
+ close(s); \
+ perror(msg); \
+ _exit(EXIT_FAILURE); \
+ } while (0)
#define SERVER_PATH "/tmp/unix_sock.server"
#define CLIENT_PATH "unix_sock.client"
@@ -18,125 +29,146 @@
#define BUF 128
#define FINS "exit_s"
#define FINC "exit_c"
-//#define INFO
+// #define INFO
-int rcvBuffer(int sock_fd){
- int rcvBufferSize;
- socklen_t sockOptSize = sizeof(rcvBufferSize);
- getsockopt(sock_fd, SOL_SOCKET, SO_RCVBUF, &rcvBufferSize, &sockOptSize);
+int rcvBuffer(int sock_fd)
+{
+ int rcvBufferSize;
+ socklen_t sockOptSize = sizeof(rcvBufferSize);
+ getsockopt(sock_fd, SOL_SOCKET, SO_RCVBUF, &rcvBufferSize, &sockOptSize);
#ifdef INFO
- printf("initial socket receive buf %d\n", rcvBufferSize);
+ printf("initial socket receive buf %d\n", rcvBufferSize);
#endif
- return rcvBufferSize;
+ return rcvBufferSize;
}
-int recvCount(const void *s, int size){
+int recvCount(const void *s, int size)
+{
register int count;
register int mark;
register char *p;
- p=(char *)s;
+ p = (char *)s;
count = 0;
mark = 0;
- do {
- if (*p && !(*(p+1))) count++;
+ do
+ {
+ if (*p && !(*(p + 1)))
+ count++;
#ifdef INFO
- printf("[%c][%X]\n",*p,*p);
+ printf("[%c][%X]\n", *p, *p);
#endif
- p++;
- mark++;
- } while (!((*p == '\0') && (*(p+1)=='\0')) && (mark < size));
+ p++;
+ mark++;
+ } while (!((*p == '\0') && (*(p + 1) == '\0')) && (mark < size));
return count;
}
-int main(int argc,char *argv[]){
+int main(int argc, char *argv[])
+{
- int client_sock, rc, len;
- struct sockaddr_un server_sockaddr;
- struct sockaddr_un client_sockaddr;
- char obuf[BUF];
- char **ibuf;
- size_t obs=BUF,ibs;
- char cpath[22];
+ int client_sock, rc, len;
+ struct sockaddr_un server_sockaddr;
+ struct sockaddr_un client_sockaddr;
+ char obuf[BUF];
+ char **ibuf;
+ size_t obs = BUF, ibs;
+ char cpath[22];
- sprintf(cpath,"%d-%s",getpid(),CLIENT_PATH);
- len = sizeof(client_sockaddr);
- memset(&server_sockaddr, 0, sizeof(struct sockaddr_un));
- memset(&client_sockaddr, 0, sizeof(struct sockaddr_un));
-
- client_sock = socket(AF_UNIX, SOCK_STREAM, 0);
- if (client_sock == -1) {
- perror("socket");
- exit(1);
- }
+ sprintf(cpath, "%d-%s", getpid(), CLIENT_PATH);
+ len = sizeof(client_sockaddr);
+ memset(&server_sockaddr, 0, sizeof(struct sockaddr_un));
+ memset(&client_sockaddr, 0, sizeof(struct sockaddr_un));
+ client_sock = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (client_sock == -1)
+ {
+ perror("socket");
+ exit(1);
+ }
- client_sockaddr.sun_family = AF_UNIX;
- strcpy(client_sockaddr.sun_path, cpath);
-
- unlink(cpath);
- rc = bind(client_sock, (struct sockaddr *) &client_sockaddr, len);
- if (rc == -1) SerrExit(client_sock,"bind");
+ client_sockaddr.sun_family = AF_UNIX;
+ strcpy(client_sockaddr.sun_path, cpath);
- server_sockaddr.sun_family = AF_UNIX;
- strcpy(server_sockaddr.sun_path, SERVER_PATH);
- rc = connect(client_sock, (struct sockaddr *) &server_sockaddr, len);
- if (rc == -1) SerrExit(client_sock,"connect");
-
- ibs=rcvBuffer(client_sock);
- if ((ibuf=(char **)malloc(ibs)) == NULL ) errExit("malloc");
+ unlink(cpath);
+ rc = bind(client_sock, (struct sockaddr *)&client_sockaddr, len);
+ if (rc == -1)
+ SerrExit(client_sock, "bind");
- do {
+ server_sockaddr.sun_family = AF_UNIX;
+ strcpy(server_sockaddr.sun_path, SERVER_PATH);
+ rc = connect(client_sock, (struct sockaddr *)&server_sockaddr, len);
+ if (rc == -1)
+ SerrExit(client_sock, "connect");
+
+ ibs = rcvBuffer(client_sock);
+ if ((ibuf = (char **)malloc(ibs)) == NULL)
+ errExit("malloc");
+
+ do
+ {
memset(obuf, 0, obs);
- printf("> ");
- scanf("%s",obuf);
+ printf("> ");
+ scanf("%s", obuf);
printf("Sending data...\n");
- rc = send(client_sock, obuf, strlen(obuf)+1, 0);
- if (rc == -1) {
+ rc = send(client_sock, obuf, strlen(obuf) + 1, 0);
+ if (rc == -1)
+ {
perror("send");
close(client_sock);
exit(1);
- } else {
- printf("Data sent!\n");
+ }
+ else
+ {
+ printf("Data sent!\n");
}
printf("Waiting to recieve data...\n");
memset(ibuf, 0, ibs);
- rc = recv(client_sock, ibuf, ibs,0);
- if (rc == -1) {
+ rc = recv(client_sock, ibuf, ibs, 0);
+ if (rc == -1)
+ {
perror("recv");
close(client_sock);
exit(1);
- } else {
- int c = recvCount(ibuf,ibs);
+ }
+ else
+ {
+ int c = recvCount(ibuf, ibs);
#ifdef INFO
- char *p = (char *)ibuf;
- printf("count: %d resieved\n",c);
- for (int i = 0; i < 32; i++){
- printf("[%c][%X]",*p,*p);
- p++;
- }
- printf("\n");
+ char *p = (char *)ibuf;
+ printf("count: %d resieved\n", c);
+ for (int i = 0; i < 32; i++)
+ {
+ printf("[%c][%X]", *p, *p);
+ p++;
+ }
+ printf("\n");
#endif
#ifndef INFO
- char p[obs];
- char *tp = (char *)ibuf;
-// if ((ibuf=(char **)malloc(ibs)) == NULL ) errExit("malloc");
- for (int i = 0; i < c; i++){
- memset(p,0,obs);
- while (*tp) {strncat(p,tp,1);tp++;}
- tp++;
-// printf("DATA RECEIVED [%ld] = %s\n", strlen(ibuf[i]),ibuf[i]);
- printf("DATA RECEIVED [%ld] = %s\n", strlen(p),p);
-// printf("DATA RECEIVED [%ld] = %s\n", strlen(p[i]),p[i]);
- }
+ char p[obs];
+ char *tp = (char *)ibuf;
+ // if ((ibuf=(char **)malloc(ibs)) == NULL ) errExit("malloc");
+ for (int i = 0; i < c; i++)
+ {
+ memset(p, 0, obs);
+ while (*tp)
+ {
+ strncat(p, tp, 1);
+ tp++;
+ }
+ tp++;
+ // printf("DATA RECEIVED [%ld] = %s\n", strlen(ibuf[i]),ibuf[i]);
+ printf("DATA RECEIVED [%ld] = %s\n", strlen(p), p);
+ // printf("DATA RECEIVED [%ld] = %s\n", strlen(p[i]),p[i]);
+ }
#endif
}
-
- } while (strcmp(obuf,FINC) && strcmp(obuf,FINS));
- close(client_sock);
- unlink(cpath);
-
- return 0;
+ } while (strcmp(obuf, FINC) && strcmp(obuf, FINS));
+
+ close(client_sock);
+ unlink(cpath);
+
+ return 0;
}
diff --git a/Practice/sock20.10.23/files/app_client b/Practice/sock20.10.23/files/app_client
new file mode 100755
index 0000000..c647da4
Binary files /dev/null and b/Practice/sock20.10.23/files/app_client differ
diff --git a/Practice/sock20.10.23/files/app_server b/Practice/sock20.10.23/files/app_server
new file mode 100755
index 0000000..72c8be5
Binary files /dev/null and b/Practice/sock20.10.23/files/app_server differ
diff --git a/Practice/sock20.10.23/s4.c b/Practice/sock20.10.23/s4.c
index 48b2e3f..c4f8b7d 100644
--- a/Practice/sock20.10.23/s4.c
+++ b/Practice/sock20.10.23/s4.c
@@ -11,132 +11,162 @@
#include
#include
-#define errExit(msg) do { perror(msg); _exit(EXIT_FAILURE); } while (0)
+#define errExit(msg) \
+ do \
+ { \
+ perror(msg); \
+ _exit(EXIT_FAILURE); \
+ } while (0)
-#define SOCK_PATH "/tmp/unix_sock.server"
+#define SOCK_PATH "/tmp/unix_sock.server"
#define DATA "Hello from server"
#define BUF 128
#define FINS "exit_s"
#define FINC "exit_c"
-void child_handler(int sig) {
- pid_t pid;
- while((pid = waitpid(-1, NULL, WNOHANG)) > 0);
+void child_handler(int sig)
+{
+ pid_t pid;
+ while ((pid = waitpid(-1, NULL, WNOHANG)) > 0)
+ ;
}
-void session(int client_sock, struct sockaddr_un server_sockaddr, struct sockaddr_un client_sockaddr){
- int rc;
- char inbuf[BUF];
- char outbuf[BUF];
- int bytes_rec = 0;
- size_t bs = BUF;
- socklen_t len;
- pid_t ppid, pid;
+void session(int client_sock, struct sockaddr_un server_sockaddr, struct sockaddr_un client_sockaddr)
+{
+ int rc;
+ char inbuf[BUF];
+ char outbuf[BUF];
+ int bytes_rec = 0;
+ size_t bs = BUF;
+ socklen_t len;
+ pid_t ppid, pid;
- ppid=getppid();
- pid=getpid();
+ ppid = getppid();
+ pid = getpid();
len = sizeof(client_sockaddr);
- rc = getpeername(client_sock, (struct sockaddr *) &client_sockaddr, &len);
- if (rc == -1){
+ rc = getpeername(client_sock, (struct sockaddr *)&client_sockaddr, &len);
+ if (rc == -1)
+ {
close(client_sock);
errExit("getpeer");
- } else {
+ }
+ else
+ {
printf("[%d] Client socket filepath: %s\n", pid, client_sockaddr.sun_path);
}
- do {
- printf("waiting for %s...\n",client_sockaddr.sun_path);
- memset(inbuf, 0, bs);
- bytes_rec = recv(client_sock, inbuf, bs, 0);
- if (bytes_rec == -1){
- close(client_sock);
- errExit("recv");
- } else {
- printf("[%s]: %s\n", client_sockaddr.sun_path, inbuf);
- }
-
- memset(outbuf, 0, bs);
- strcpy(outbuf, DATA);
- printf("Sending data...\n");
- rc = send(client_sock, outbuf, strlen(outbuf)+1, 0);
- if (rc == -1) {
- close(client_sock);
- errExit("send");
- } else {
- printf("Data sent!\n");
- }
- if (strcmp(inbuf,FINS) == 0 ) {kill(ppid,SIGTERM);break;}
- } while (strcmp(inbuf,FINC));
+ do
+ {
+ printf("waiting for %s...\n", client_sockaddr.sun_path);
+ memset(inbuf, 0, bs);
+ bytes_rec = recv(client_sock, inbuf, bs, 0);
+ if (bytes_rec == -1)
+ {
+ close(client_sock);
+ errExit("recv");
+ }
+ else
+ {
+ printf("[%s]: %s\n", client_sockaddr.sun_path, inbuf);
+ }
+
+ memset(outbuf, 0, bs);
+ strcpy(outbuf, DATA);
+ printf("Sending data...\n");
+ rc = send(client_sock, outbuf, strlen(outbuf) + 1, 0);
+ if (rc == -1)
+ {
+ close(client_sock);
+ errExit("send");
+ }
+ else
+ {
+ printf("Data sent!\n");
+ }
+ if (strcmp(inbuf, FINS) == 0)
+ {
+ kill(ppid, SIGKILL);
+ break;
+ }
+ } while (strcmp(inbuf, FINC));
memset(outbuf, 0, bs);
- sprintf(outbuf,"Exit %d\n",pid);
- rc = send(client_sock, outbuf, strlen(outbuf)+1, 0);
- if (rc == -1) {
+ sprintf(outbuf, "Exit %d\n", pid);
+ rc = send(client_sock, outbuf, strlen(outbuf) + 1, 0);
+ if (rc == -1)
+ {
close(client_sock);
errExit("send");
- }
+ }
close(client_sock);
exit(0);
}
-int main(void){
+int main(void)
+{
- int server_sock, client_sock, rc;
- socklen_t len;
- struct sockaddr_un server_sockaddr;
- struct sockaddr_un client_sockaddr;
- int backlog = 10;
- pid_t pid;
+ int server_sock, client_sock, rc;
+ socklen_t len;
+ struct sockaddr_un server_sockaddr;
+ struct sockaddr_un client_sockaddr;
+ int backlog = 10;
+ pid_t pid;
- struct sigaction new_act, old_act;
- sigemptyset (&new_act.sa_mask);
- new_act.sa_flags = SA_RESTART;
- new_act.sa_handler = child_handler;
- sigaction (SIGCHLD, &new_act, &old_act);
+ struct sigaction new_act, old_act;
+ sigemptyset(&new_act.sa_mask);
+ new_act.sa_flags = SA_RESTART;
+ new_act.sa_handler = child_handler;
+ sigaction(SIGCHLD, &new_act, &old_act);
- len = sizeof(server_sockaddr);
- memset(&server_sockaddr, 0, sizeof(struct sockaddr_un));
- memset(&client_sockaddr, 0, sizeof(struct sockaddr_un));
-
- server_sock = socket(AF_UNIX, SOCK_STREAM, 0);
- if (server_sock == -1) errExit("socket");
-
- server_sockaddr.sun_family = AF_UNIX;
- strcpy(server_sockaddr.sun_path, SOCK_PATH);
-
- unlink(SOCK_PATH);
- rc = bind(server_sock, (struct sockaddr *) &server_sockaddr, len);
- if (rc == -1){
- close(server_sock);
- errExit("bind");
- }
-
- rc = listen(server_sock, backlog);
- if (rc == -1){
- close(server_sock);
- errExit("listen");
- }
+ len = sizeof(server_sockaddr);
+ memset(&server_sockaddr, 0, sizeof(struct sockaddr_un));
+ memset(&client_sockaddr, 0, sizeof(struct sockaddr_un));
- printf("socket listening...\n");
+ server_sock = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (server_sock == -1)
+ errExit("socket");
- do {
- client_sock = accept(server_sock, (struct sockaddr *) &client_sockaddr, &len);
- if (client_sock == -1){
+ server_sockaddr.sun_family = AF_UNIX;
+ strcpy(server_sockaddr.sun_path, SOCK_PATH);
+
+ unlink(SOCK_PATH);
+ rc = bind(server_sock, (struct sockaddr *)&server_sockaddr, len);
+ if (rc == -1)
+ {
close(server_sock);
- close(client_sock);
- errExit("accept");
+ errExit("bind");
}
- if ((pid = fork()) == -1 ) {
- close(server_sock);
- close(client_sock);
- errExit("fork");
- }
- if (pid == 0) session(client_sock,server_sockaddr,client_sockaddr);
- close(client_sock);
- } while (1);
-
- close(server_sock);
- unlink(SOCK_PATH);
-
- return 0;
+ rc = listen(server_sock, backlog);
+ if (rc == -1)
+ {
+ close(server_sock);
+ errExit("listen");
+ }
+
+ printf("socket listening...\n");
+
+ do
+ {
+ client_sock = accept(server_sock, (struct sockaddr *)&client_sockaddr, &len);
+ if (client_sock == -1)
+ {
+ close(server_sock);
+ close(client_sock);
+ errExit("accept");
+ }
+ if ((pid = fork()) == -1)
+ {
+ close(server_sock);
+ close(client_sock);
+ errExit("fork");
+ }
+ if (pid == 0)
+ session(client_sock, server_sockaddr, client_sockaddr);
+ close(client_sock);
+ } while (1);
+
+ close(server_sock);
+ unlink(SOCK_PATH);
+
+ return 0;
}
diff --git a/Practice/trash/app_poll2 b/Practice/trash/app_poll2
new file mode 100755
index 0000000..651af04
Binary files /dev/null and b/Practice/trash/app_poll2 differ