From ddd09c50db0309849dbf535fa2702b08027e94c0 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Fri, 3 Nov 2023 15:05:59 +0300 Subject: [PATCH] repack rep --- Practice/01.11/data.h | 12 ++ Practice/01.11/inet.c | 146 ++++++++++++++++ Practice/01.11/o_app | Bin 0 -> 17080 bytes Practice/01.11/onLess.c | 26 +++ Practice/01.11/on_app1 | Bin 0 -> 16160 bytes Practice/01.11/on_app2 | Bin 0 -> 16208 bytes Practice/01.11/on_less2.c | 29 ++++ Practice/lecture23.10/app_server | Bin 0 -> 16408 bytes Practice/lecture23.10/server.c | 58 +++++++ Practice/lecture23.10/socket.c | 70 ++++++++ Practice/sem25.10/c_inet.c | 64 +++++++ Practice/sem25.10/client_app | Bin 0 -> 16880 bytes Practice/sem25.10/s_inet.c | 70 ++++++++ Practice/sem25.10/server_app | Bin 0 -> 16792 bytes Practice/sem25.10/test.c | 0 Practice/sock20.10.23/app_client | Bin 0 -> 17056 bytes Practice/sock20.10.23/app_server | Bin 0 -> 17208 bytes Practice/sock20.10.23/c4.c | 198 +++++++++++++--------- Practice/sock20.10.23/files/app_client | Bin 0 -> 17056 bytes Practice/sock20.10.23/files/app_server | Bin 0 -> 17208 bytes Practice/sock20.10.23/s4.c | 226 ++++++++++++++----------- Practice/trash/app_poll2 | Bin 0 -> 16944 bytes 22 files changed, 718 insertions(+), 181 deletions(-) create mode 100644 Practice/01.11/data.h create mode 100644 Practice/01.11/inet.c create mode 100755 Practice/01.11/o_app create mode 100644 Practice/01.11/onLess.c create mode 100755 Practice/01.11/on_app1 create mode 100755 Practice/01.11/on_app2 create mode 100644 Practice/01.11/on_less2.c create mode 100755 Practice/lecture23.10/app_server create mode 100644 Practice/lecture23.10/server.c create mode 100644 Practice/lecture23.10/socket.c create mode 100644 Practice/sem25.10/c_inet.c create mode 100755 Practice/sem25.10/client_app create mode 100644 Practice/sem25.10/s_inet.c create mode 100755 Practice/sem25.10/server_app create mode 100644 Practice/sem25.10/test.c create mode 100755 Practice/sock20.10.23/app_client create mode 100755 Practice/sock20.10.23/app_server create mode 100755 Practice/sock20.10.23/files/app_client create mode 100755 Practice/sock20.10.23/files/app_server create mode 100755 Practice/trash/app_poll2 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> + + </ 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 <netinet/in.h> +#include <netdb.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <signal.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> + +#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 0000000000000000000000000000000000000000..11469fdf0b1d957a3558dcfcf9e1667dbe9c450b GIT binary patch literal 17080 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 bCZbIqC6}wTnEO@sfAex>G1=qb5ygK2h}mBX literal 0 HcmV?d00001 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 <stdio.h> +#include <sys/types.h> +#include <dirent.h> + +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 0000000000000000000000000000000000000000..08a9822c8d833f724908a12c5cdec92834124b6e GIT binary patch literal 16160 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 literal 0 HcmV?d00001 diff --git a/Practice/01.11/on_app2 b/Practice/01.11/on_app2 new file mode 100755 index 0000000000000000000000000000000000000000..001225f9285a888817996de4c52fe8f6b91bd691 GIT binary patch literal 16208 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 literal 0 HcmV?d00001 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 <stdio.h> +#include <sys/types.h> +#include <dirent.h> +#include <string.h> +#include <stdlib.h> + +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 0000000000000000000000000000000000000000..0d42b8b98c48287cb4aed873e315a906fbd43a8f GIT binary patch literal 16408 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 E0Ny<@ga7~l literal 0 HcmV?d00001 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 <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <error.h> +#include <string.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <unistd.h> + +#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 <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +#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 <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +//./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 0000000000000000000000000000000000000000..9d720e9e61e89b155f04268f36a9db3b1262e662 GIT binary patch literal 16880 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 Ubh!syq-plm%41$2AfSqW0@f^0`2YX_ literal 0 HcmV?d00001 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 <netinet/in.h> +#include <netdb.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#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 0000000000000000000000000000000000000000..ac73a9023237dbb837e09986283c895edc04dce3 GIT binary patch literal 16792 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c647da4e44174a94a8d43e8b4268545294c842ed GIT binary patch literal 17056 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 literal 0 HcmV?d00001 diff --git a/Practice/sock20.10.23/app_server b/Practice/sock20.10.23/app_server new file mode 100755 index 0000000000000000000000000000000000000000..f050949aaf0644a465e6423b8c3f6844b724eb50 GIT binary patch literal 17208 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 IlZzGq2~1R0W&i*H literal 0 HcmV?d00001 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 <unistd.h> #include <time.h> -#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 0000000000000000000000000000000000000000..c647da4e44174a94a8d43e8b4268545294c842ed GIT binary patch literal 17056 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 literal 0 HcmV?d00001 diff --git a/Practice/sock20.10.23/files/app_server b/Practice/sock20.10.23/files/app_server new file mode 100755 index 0000000000000000000000000000000000000000..72c8be51045adba5f8f51d18f4a0249917ea6309 GIT binary patch literal 17208 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 H7c2e?AwpJb literal 0 HcmV?d00001 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 <sys/wait.h> #include <sys/types.h> -#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 0000000000000000000000000000000000000000..651af046c79696e31f555dd9e83b7ebe8672b83c GIT binary patch literal 16944 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 literal 0 HcmV?d00001