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 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 <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 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 <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 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 <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 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 <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 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 <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 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 <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 0000000..651af04 Binary files /dev/null and b/Practice/trash/app_poll2 differ