File: test-server.c

package info (click to toggle)
librapi2 0.9.0-6
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,204 kB
  • ctags: 1,258
  • sloc: sh: 9,013; ansic: 5,743; cpp: 522; makefile: 171
file content (93 lines) | stat: -rw-r--r-- 1,723 bytes parent folder | download
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/* $Id: test-server.c,v 1.3 2002/07/28 10:55:30 twogood Exp $ */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <ctype.h>

#define LISTENQ  1024


int main()
{
	int result = 1;
	int listenfd;
	int connfd;
	struct sockaddr_in servaddr;
	struct sockaddr_in cliaddr;
	socklen_t clilen;
	size_t size;
	uint32_t size_le;
	char* buffer;
	int i;
	
	if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
		goto fail;

	memset(&servaddr, 0, sizeof(servaddr));
	servaddr.sin_port = htons(0xde0);
	if ( inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr) <= 0 )
		goto fail;

	if ( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0 )
	{
		printf("Bind failed.\n");
		goto fail;
	}

	if ( listen(listenfd, LISTENQ) < 0 )
		goto fail;
	
	clilen = sizeof(cliaddr);
	if ( (connfd = accept(listenfd, (struct sockaddr*)&cliaddr, &clilen)) < 0 )
		goto fail;

	printf("Connected.\n");
	
	close(listenfd);

	if ( sizeof(size_le) != read(connfd, &size_le, sizeof(size_le)) )
		goto fail;

	printf("Read size = %08x.\n", size_le);
	
	/* XXX: size_le is little endian */
	size = size_le;
	
	if ( (buffer = malloc(size)) == NULL )
		goto fail;

	if ( size != read(connfd, buffer, size) )
		goto fail;

	for (i = 0; i < size; i++)
	{
		if (i > 0)
			printf(",");
		
		if (isprint(buffer[i]))
			printf("'%c'", buffer[i]);
		else
			printf("%02x", buffer[i]);
	}
	printf("\n");

	if ( sizeof(size_le) != write(connfd, &size_le, sizeof(size_le)) )
		goto fail;
	
	if ( size_le != write(connfd, buffer, size_le) )
		goto fail;
	
	printf("Write finished.\n");

	close(connfd);
	
	result = 0;

fail:
	return result;
}