codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#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; }
Private
[
?
]
Run code
Submit