Hi,
I am reading and understanding code from a book.
I am copy pasting the exact code which I have.
Following program is for client.c

#include<sys/types.h>
#include<sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>>
#include <stdlib.h>
int main() {
int sockfd;
int len;
struct sockaddr_un address;
int result;
char ch = 'A';
        sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
        address.sun_family = AF_UNIX;
        strcpy(address.sun_path, "server_socket");

I was not able to understand the use of server_socket in above strcpy function.
Where does this come to picture

len = sizeof(address);
        result = connect(sockfd, (struct sockaddr *)&address, len);
        if(result == -1) {
        perror("oops: client1");
        exit(1);
        }

write(sockfd, &ch, 1);
read(sockfd, &ch, 1);
printf("char from server = %c\n", ch);
close(sockfd);
exit(0);
}

When I run the code as

gcc client.c -o client.o

then on terminal I see each time letter B why is that happening.


and following program is for server.c

#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include<stdlib.h>
int main()
{
        int server_sockfd, client_sockfd;
        int server_len, client_len;
        struct sockaddr_un server_address;
        struct sockaddr_un client_address;
        unlink("server_socket");
        server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
        server_address.sun_family = AF_UNIX;
        strcpy(server_address.sun_path, "server_socket");

I am not clear with use of server_address.sun_path
I understand that server_address is a struct of type sockaddr_un
but what is sun_path I had seen the file linux/un.h
but could not understand.

server_len = sizeof(server_address);
        bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
        listen(server_sockfd, 5);
        while (1) {
                char ch;
                printf("server waiting\n");
                client_len = sizeof(client_address);
                client_sockfd = accept(server_sockfd,
                                       (struct sockaddr *)&client_address,
                                       &client_len);
                read(client_sockfd, &ch, 1);
                ch++;
                write(client_sockfd, &ch, 1);
                close(client_sockfd);
        }
}

Recommended Answers

All 4 Replies

Because the server is accepting the character(from the client) and then incrementing it and then sending it back to the client...

Check lines 11 - 13 in the server program(the second part).

What about server_address.sun_path ?

Thanks for the link it was a good link.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.