diff options
Diffstat (limited to 'man7/unix.7')
| -rw-r--r-- | man7/unix.7 | 124 |
1 files changed, 62 insertions, 62 deletions
diff --git a/man7/unix.7 b/man7/unix.7 index e23ccbc122..b9e28b20ed 100644 --- a/man7/unix.7 +++ b/man7/unix.7 @@ -907,16 +907,16 @@ a null terminator for the string returned in .in +4n .EX void *addrp; - +\& addrlen = sizeof(struct sockaddr_un); addrp = malloc(addrlen + 1); if (addrp == NULL) /* Handle error */ ; memset(addrp, 0, addrlen + 1); - +\& if (getsockname(sfd, (struct sockaddr *) addrp, &addrlen)) == \-1) /* handle error */ ; - +\& printf("sun_path = %s\en", ((struct sockaddr_un *) addrp)\->sun_path); .EE .in @@ -963,14 +963,14 @@ $ /* * File connection.h */ - +\& #define SOCKET_NAME "/tmp/9Lq7BNBnBycd6nxy.socket" #define BUFFER_SIZE 12 - +\& /* * File server.c */ - +\& #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -978,7 +978,7 @@ $ #include <sys/un.h> #include <unistd.h> #include "connection.h" - +\& int main(int argc, char *argv[]) { @@ -989,123 +989,123 @@ main(int argc, char *argv[]) int data_socket; int result; char buffer[BUFFER_SIZE]; - +\& /* Create local socket. */ - +\& connection_socket = socket(AF_UNIX, SOCK_SEQPACKET, 0); if (connection_socket == \-1) { perror("socket"); exit(EXIT_FAILURE); } - +\& /* * For portability clear the whole structure, since some * implementations have additional (nonstandard) fields in * the structure. */ - +\& memset(&name, 0, sizeof(name)); - +\& /* Bind socket to socket name. */ - +\& name.sun_family = AF_UNIX; strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) \- 1); - +\& ret = bind(connection_socket, (const struct sockaddr *) &name, sizeof(name)); if (ret == \-1) { perror("bind"); exit(EXIT_FAILURE); } - +\& /* * Prepare for accepting connections. The backlog size is set * to 20. So while one request is being processed other requests * can be waiting. */ - +\& ret = listen(connection_socket, 20); if (ret == \-1) { perror("listen"); exit(EXIT_FAILURE); } - +\& /* This is the main loop for handling connections. */ - +\& for (;;) { - +\& /* Wait for incoming connection. */ - +\& data_socket = accept(connection_socket, NULL, NULL); if (data_socket == \-1) { perror("accept"); exit(EXIT_FAILURE); } - +\& result = 0; for (;;) { - +\& /* Wait for next data packet. */ - +\& ret = read(data_socket, buffer, sizeof(buffer)); if (ret == \-1) { perror("read"); exit(EXIT_FAILURE); } - +\& /* Ensure buffer is 0\-terminated. */ - +\& buffer[sizeof(buffer) \- 1] = 0; - +\& /* Handle commands. */ - +\& if (!strncmp(buffer, "DOWN", sizeof(buffer))) { down_flag = 1; break; } - +\& if (!strncmp(buffer, "END", sizeof(buffer))) { break; } - +\& /* Add received summand. */ - +\& result += atoi(buffer); } - +\& /* Send result. */ - +\& sprintf(buffer, "%d", result); ret = write(data_socket, buffer, sizeof(buffer)); if (ret == \-1) { perror("write"); exit(EXIT_FAILURE); } - +\& /* Close socket. */ - +\& close(data_socket); - +\& /* Quit on DOWN command. */ - +\& if (down_flag) { break; } } - +\& close(connection_socket); - +\& /* Unlink the socket. */ - +\& unlink(SOCKET_NAME); - +\& exit(EXIT_SUCCESS); } - +\& /* * File client.c */ - +\& #include <errno.h> #include <stdio.h> #include <stdlib.h> @@ -1114,7 +1114,7 @@ main(int argc, char *argv[]) #include <sys/un.h> #include <unistd.h> #include "connection.h" - +\& int main(int argc, char *argv[]) { @@ -1122,37 +1122,37 @@ main(int argc, char *argv[]) int ret; int data_socket; char buffer[BUFFER_SIZE]; - +\& /* Create local socket. */ - +\& data_socket = socket(AF_UNIX, SOCK_SEQPACKET, 0); if (data_socket == \-1) { perror("socket"); exit(EXIT_FAILURE); } - +\& /* * For portability clear the whole structure, since some * implementations have additional (nonstandard) fields in * the structure. */ - +\& memset(&addr, 0, sizeof(addr)); - +\& /* Connect socket to socket address. */ - +\& addr.sun_family = AF_UNIX; strncpy(addr.sun_path, SOCKET_NAME, sizeof(addr.sun_path) \- 1); - +\& ret = connect(data_socket, (const struct sockaddr *) &addr, sizeof(addr)); if (ret == \-1) { fprintf(stderr, "The server is down.\en"); exit(EXIT_FAILURE); } - +\& /* Send arguments. */ - +\& for (size_t i = 1; i < argc; ++i) { ret = write(data_socket, argv[i], strlen(argv[i]) + 1); if (ret == \-1) { @@ -1160,34 +1160,34 @@ main(int argc, char *argv[]) break; } } - +\& /* Request result. */ - +\& strcpy(buffer, "END"); ret = write(data_socket, buffer, strlen(buffer) + 1); if (ret == \-1) { perror("write"); exit(EXIT_FAILURE); } - +\& /* Receive result. */ - +\& ret = read(data_socket, buffer, sizeof(buffer)); if (ret == \-1) { perror("read"); exit(EXIT_FAILURE); } - +\& /* Ensure buffer is 0\-terminated. */ - +\& buffer[sizeof(buffer) \- 1] = 0; - +\& printf("Result = %s\en", buffer); - +\& /* Close socket. */ - +\& close(data_socket); - +\& exit(EXIT_SUCCESS); } .EE |
