Пример за двойка сокети
Отворете двойка сокети, при грешка изведете съобщение и излезте от програмата. Създайте дъщерен процес, при грешка изведете съобщение и излезте от програмата. Родителския процес: чака получаване на съобщение като чете от първият сокет, след което изпраща отговор с подобаващо обратно съобщение, като пише в първият сокет. Дъщерния процес: изпраща съобщение като пише в втория сокет и чака получаване на обратно съобщение, като чете от втория сокет. Накрая затворете двойката сокети.
socket-pair.c
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#define MSG_HELLO "HELLO"
#define MSG_OK "OK"
#define BUF_SIZE 256
int main(int argc, char ** argv)
{
char buf[BUF_SIZE];
int sockets[2];
if(socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) < 0)
{
printf("Error socketpair.\n");
return EXIT_FAILURE; // -1
}
int pid = fork();
if(pid < 0)
{
printf("Error fork.\n");
return EXIT_FAILURE; // -1
}
if(pid > 0)
{
read(sockets[0], buf, sizeof(buf));
write(sockets[0], MSG_OK, sizeof(MSG_OK));
printf("Process (pid = %i) send message: %s\n", getpid(), buf);
}
if(pid == 0)
{
write(sockets[1], MSG_HELLO, sizeof(MSG_HELLO));
read(sockets[1], buf, sizeof(buf));
printf("Process (pid = %i) send messagge: %s\n", getpid(), buf);
}
close(sockets[0]);
close(sockets[1]);
return EXIT_SUCCESS; // 0
}
Компилирайте и стартирайте програмата:
gcc socket-pair.c -o socket-pair
./socket-pair
Last updated
Was this helpful?