[ create a new paste ] login | about

Link: http://codepad.org/W1OO4zt1    [ raw code | fork ]

C, pasted on May 30:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/un.h> 

#define SOCKET_ADDRESS "my_socket"

int main (int argc, char *argv[])
{
    pid_t pid = fork();

    if (pid < 0)
    {
        fprintf(stderr, "fork: %s", strerror(errno));
        return 1;
    }

    /**************CLIENT*******************/

    if (pid == 0)
    {
        pid = getpid();
        printf("Child process with pid=%d\n", pid);

        sleep(1);
        int sd = socket(PF_UNIX, SOCK_STREAM, 0);

        if(sd == -1)
        {
            perror("Socket failed");
            return 1;
        }

        struct sockaddr_un address;
        address.sun_family = AF_UNIX;
        strcpy(address.sun_path, SOCKET_ADDRESS);

        if(connect(sd, (struct sockaddr *)&address, sizeof(struct sockaddr_un)) != 0)
        {
            perror("Connect failed (client)");
            close(sd);
            return 1;
        }

        if(write(sd, "Hi", 3) < 0) 
        {
            perror("Write failed");
            close(sd);
            return 1;
        }

        close(sd);
        return 0;
    }

    /**************SERVER*******************/

    pid = getpid();
    printf("Main process with pid=%d\n", pid);

    int sd = socket(PF_UNIX, SOCK_STREAM, 0);

    if(sd == -1)
    {
        perror("Socket failed (server)");
        return 1;
    }

    unlink(SOCKET_ADDRESS);

    struct sockaddr_un address;
    address.sun_family = AF_UNIX;
    strcpy(address.sun_path, SOCKET_ADDRESS);

    if(bind(sd, (struct sockaddr *)&address, sizeof(struct sockaddr_un)) != 0)
    {
        perror("Bind failed");
        close(sd);
        return 1;
    }

    if(listen(sd, 5) != 0)
    {
        perror("Listen failed");
        close(sd);
        return 1;
    }

    int cd;
    socklen_t address_len;

    while((cd = accept(sd, (struct sockaddr *) &address, &address_len)) > -1)
    {
        char *message;
        if(read(cd, message, 3) < 0)
        {
            perror("Read failed");
            close(cd);
            close(sd);
            return 1;
        }

        printf("%s\n", message);

        close(cd);
    }

    close(sd);
    unlink(SOCKET_ADDRESS);
    return 0;
}


Create a new paste based on this one


Comments: