Revision 8 logic/trunk/src/hci_comm/hci_comm_listener.c
hci_comm_listener.c | ||
---|---|---|
18 | 18 |
int listenTo(unsigned short int portNum) { |
19 | 19 |
|
20 | 20 |
// Buffer |
21 |
char *requestBuffer = malloc(HCI_COMM_REQUEST_BUFFER_SIZE * sizeof char);
|
|
22 |
if(requestBuffer = NULL) { |
|
21 |
char *requestBuffer = malloc(HCI_COMM_REQUEST_BUFFER_SIZE * sizeof(char));
|
|
22 |
if(requestBuffer == NULL) {
|
|
23 | 23 |
fprintf(stderr,"HCI comm error: Cannot allocate buffer.\n"); |
24 | 24 |
return HCI_COMM_ERR_BUF_ALOC_FAIL; |
25 | 25 |
} |
... | ... | |
27 | 27 |
// Socket holder |
28 | 28 |
int socketHolder = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); |
29 | 29 |
if(socketHolder < 0) { |
30 |
fpritf(stderr,"HCI comm error: Cannot create a new socket.\n"); |
|
30 |
fprintf(stderr,"HCI comm error: Cannot create a new socket.\n");
|
|
31 | 31 |
return HCI_COMM_ERR_NEW_SOCKET_FAIL; |
32 | 32 |
} |
33 | 33 |
|
34 | 34 |
// Socket address holder |
35 | 35 |
struct sockaddr_in socketAddressHolder; |
36 |
memset(&socketAddressHolder, 0, sizeof socketAddressHolder);
|
|
37 |
stSockAddr.sin_family = AF_INET;
|
|
38 |
stSockAddr.sin_port = htons(portNum);
|
|
39 |
stSockAddr.sin_addr.s_addr = INADDR_ANY;
|
|
36 |
memset(&socketAddressHolder, 0, sizeof(socketAddressHolder));
|
|
37 |
socketAddressHolder.sin_family = AF_INET;
|
|
38 |
socketAddressHolder.sin_port = htons(portNum);
|
|
39 |
socketAddressHolder.sin_addr.s_addr = INADDR_ANY;
|
|
40 | 40 |
|
41 | 41 |
// Bind socket to port |
42 |
int bindingResult = bind(socketHolder,(struct sockaddr *)&socketAddressHolder, sizeof socketAddressHolder);
|
|
42 |
int bindingResult = bind(socketHolder,(struct sockaddr *)&socketAddressHolder, sizeof(socketAddressHolder));
|
|
43 | 43 |
if(bindingResult == -1) { |
44 |
fpritf(stderr,"HCI comm error: Cannot bind socket to port %d.\n",portNum); |
|
44 |
fprintf(stderr,"HCI comm error: Cannot bind socket to port %d.\n",portNum);
|
|
45 | 45 |
close(socketHolder); |
46 | 46 |
return HCI_COMM_ERR_BIND_FAIL; |
47 | 47 |
} |
... | ... | |
49 | 49 |
// Listen to port |
50 | 50 |
int listenResult = listen(socketHolder, 10); |
51 | 51 |
if(listenResult == -1) { |
52 |
fpritf(stderr,"HCI comm error: Cannot listen to port %d.\n",portNum); |
|
52 |
fprintf(stderr,"HCI comm error: Cannot listen to port %d.\n",portNum);
|
|
53 | 53 |
close(socketHolder); |
54 | 54 |
return HCI_COMM_ERR_LISTEN_FAIL; |
55 | 55 |
} |
56 | 56 |
|
57 | 57 |
// Infinite listening |
58 |
while(true) {
|
|
58 |
while(1) {
|
|
59 | 59 |
|
60 | 60 |
// Accept request |
61 | 61 |
int connectionHolder = accept(socketHolder,NULL,NULL); |
62 | 62 |
if(connectionHolder < 0) { |
63 |
fpritf(stderr,"HCI comm error: Error accepting request.\n"); |
|
63 |
fprintf(stderr,"HCI comm error: Error accepting request.\n");
|
|
64 | 64 |
close(socketHolder); |
65 | 65 |
return HCI_COMM_ERR_ACCEPT_FAIL; |
66 | 66 |
} |
... | ... | |
68 | 68 |
// Read request |
69 | 69 |
int readResult = read(connectionHolder,requestBuffer,HCI_COMM_REQUEST_BUFFER_SIZE); |
70 | 70 |
if(readResult < 0) { |
71 |
fpritf(stderr,"HCI comm error: Error reading request.\n"); |
|
71 |
fprintf(stderr,"HCI comm error: Error reading request.\n");
|
|
72 | 72 |
close(socketHolder); |
73 | 73 |
return HCI_COMM_ERR_READ_FAIL; |
74 | 74 |
} |
... | ... | |
85 | 85 |
// Send response |
86 | 86 |
int writeResult = write(connectionHolder,hciResponse,responseLength); |
87 | 87 |
if(writeResult < 0) { |
88 |
fpritf(stderr,"HCI comm error: Error writting response.\n"); |
|
88 |
fprintf(stderr,"HCI comm error: Error writting response.\n");
|
|
89 | 89 |
close(socketHolder); |
90 | 90 |
return HCI_COMM_ERR_WRITE_FAIL; |
91 | 91 |
} |
Also available in: Unified diff