aboutsummaryrefslogtreecommitdiffstats
path: root/tests/virtsock/virtsock_server_unix_domain.c
blob: 8f2960bb1ddc76d28947eb5ac11ca77439d24458 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* uds_server.c */
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define BUF 1024
#define UDS_FILE "/tmp/osmocom_l2"
int main(void) {
	int create_socket, new_socket;
	socklen_t addrlen;
	char *buffer = malloc(BUF);
	ssize_t size;
	struct sockaddr_un address;
	printf("\e[2J");
	if ((create_socket = socket(AF_LOCAL, SOCK_STREAM, 0)) > 0)
		printf("Socket wurde angelegt\n");
	unlink(UDS_FILE);
	address.sun_family = AF_LOCAL;
	strcpy(address.sun_path, UDS_FILE);
	if (bind(create_socket, (struct sockaddr *) &address, sizeof(address))
			!= 0) {
		printf("Der Port ist nicht frei – belegt!\n");
	}
	listen(create_socket, 5);
	addrlen = sizeof(struct sockaddr_in);
	new_socket = accept(create_socket, (struct sockaddr *) &address, &addrlen);
	if (new_socket > 0)
		printf("Ein Client ist verbunden ...\n");
	do {
		printf("Nachricht zum Versenden: ");
		fgets(buffer, BUF, stdin);
		send(new_socket, buffer, strlen(buffer), 0);
		size = recv(new_socket, buffer, BUF - 1, 0);
		if (size > 0)
			buffer[size] = '\0';
		printf("Nachricht empfangen: %s\n", buffer);
	} while (strcmp(buffer, "quit\n") != 0);
	close(new_socket);
	close(create_socket);
	return EXIT_SUCCESS;
}