|
|
@@ -17,10 +17,13 @@
|
|
|
|
|
|
#include "command.h"
|
|
|
|
|
|
-#define REQUESTED_MEMORY_SIZE 0x1000
|
|
|
+#define REQUESTED_MEMORY_SIZE 0x1000
|
|
|
+#define SERVER_PORT 5000
|
|
|
+#define BACKLOG 10
|
|
|
|
|
|
-volatile int sockfd = 0;
|
|
|
+volatile int conn_fd = 0;
|
|
|
volatile int pci_fd = 0;
|
|
|
+int listen_fd = 0;
|
|
|
|
|
|
void *bar1;
|
|
|
|
|
|
@@ -29,9 +32,13 @@ void error(const char *msg)
|
|
|
{
|
|
|
perror(msg);
|
|
|
|
|
|
- if (sockfd != 0)
|
|
|
+ if (conn_fd != 0)
|
|
|
{
|
|
|
- close(sockfd);
|
|
|
+ close(conn_fd);
|
|
|
+ }
|
|
|
+ if (listen_fd != 0)
|
|
|
+ {
|
|
|
+ close(listen_fd);
|
|
|
}
|
|
|
if (pci_fd != 0)
|
|
|
{
|
|
|
@@ -47,9 +54,13 @@ void handleCloseSignal(int signal)
|
|
|
if (signal == SIGINT)
|
|
|
{
|
|
|
printf("\nCaught signal %d, closing socket and exiting...\n", signal);
|
|
|
- if (sockfd != 0)
|
|
|
+ if (conn_fd != 0)
|
|
|
+ {
|
|
|
+ close(conn_fd);
|
|
|
+ }
|
|
|
+ if (listen_fd != 0)
|
|
|
{
|
|
|
- close(sockfd);
|
|
|
+ close(listen_fd);
|
|
|
}
|
|
|
if (pci_fd != 0)
|
|
|
{
|
|
|
@@ -62,6 +73,10 @@ void handleCloseSignal(int signal)
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
{
|
|
|
+ socklen_t client_len;
|
|
|
+ ssize_t n;
|
|
|
+ struct sockaddr_in serv_addr, client_addr;
|
|
|
+ char recvBuff[1024];
|
|
|
|
|
|
char *filename = "/dev/MyDmaModule";
|
|
|
|
|
|
@@ -88,22 +103,16 @@ int main(int argc, char *argv[])
|
|
|
ad9912_init(bar1);
|
|
|
lmx2594_init(bar1);
|
|
|
|
|
|
- //argv[1] = "127.0.0.1";
|
|
|
- ssize_t n;
|
|
|
- char recvBuff[1024];
|
|
|
- struct sockaddr_in serv_addr;
|
|
|
-
|
|
|
// Установка обработчика сигналов
|
|
|
signal(SIGINT, handleCloseSignal);
|
|
|
|
|
|
- if(argc != 2)
|
|
|
- {
|
|
|
- printf("\n Usage: %s <ip of server> \n",argv[0]);
|
|
|
- return 1;
|
|
|
- }
|
|
|
+ // if(argc != 2)
|
|
|
+ // {
|
|
|
+ // printf("\n Usage: %s <ip of server> \n",argv[0]);
|
|
|
+ // return 1;
|
|
|
+ // }
|
|
|
|
|
|
- memset(recvBuff, 0,sizeof(recvBuff));
|
|
|
- if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
|
|
|
+ listen_fd = socket(AF_INET, SOCK_STREAM, 0);
|
|
|
{
|
|
|
error("Error : Could not create socket!");
|
|
|
}
|
|
|
@@ -111,46 +120,72 @@ int main(int argc, char *argv[])
|
|
|
memset(&serv_addr, 0, sizeof(serv_addr));
|
|
|
|
|
|
serv_addr.sin_family = AF_INET;
|
|
|
- serv_addr.sin_port = htons(5000);
|
|
|
+ serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
|
+ serv_addr.sin_port = htons(SERVER_PORT);
|
|
|
|
|
|
- if (inet_pton(AF_INET, argv[1], &serv_addr.sin_addr) <= 0)
|
|
|
- {
|
|
|
- error("inet_pton error occured");
|
|
|
- }
|
|
|
+ // if (inet_pton(AF_INET, argv[1], &serv_addr.sin_addr) <= 0)
|
|
|
+ // {
|
|
|
+ // error("inet_pton error occured");
|
|
|
+ // }
|
|
|
+
|
|
|
+ // if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
|
|
|
+ // {
|
|
|
+ // error("Error : Connect Failed");
|
|
|
+ // }
|
|
|
|
|
|
- if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
|
|
|
+ if (bind(listen_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
|
|
|
{
|
|
|
- error("Error : Connect Failed");
|
|
|
- }
|
|
|
+ error("Error : Bind failed");
|
|
|
+ }
|
|
|
|
|
|
- while ((n = recv(sockfd, recvBuff, sizeof(recvBuff) - 1, 0)) > 0)
|
|
|
+ if (listen(listen_fd, BACKLOG) < 0)
|
|
|
{
|
|
|
- recvBuff[n] = 0;
|
|
|
- if(fputs(recvBuff, stdout) == EOF)
|
|
|
+ error("Error : Listen failed");
|
|
|
+ }
|
|
|
+
|
|
|
+ while(1) {
|
|
|
+ client_len = sizeof(client_addr);
|
|
|
+ conn_fd = accept(listen_fd, (struct sockaddr*)&client_addr, &client_len);
|
|
|
+ if (conn_fd < 0)
|
|
|
{
|
|
|
- printf("\n Error : Fputs error\n");
|
|
|
- break;
|
|
|
+ perror("Error : Accept failed");
|
|
|
+ continue;
|
|
|
}
|
|
|
- //Запуск парсера команд
|
|
|
- processCommand(recvBuff);
|
|
|
- }
|
|
|
|
|
|
- if (n == 0)
|
|
|
- {
|
|
|
- // Соединение закрыто сервером
|
|
|
- printf("\n Server closed the connection\n");
|
|
|
+ memset(recvBuff, 0,sizeof(recvBuff));
|
|
|
+
|
|
|
+ while ((n = recv(conn_fd, recvBuff, sizeof(recvBuff) - 1, 0)) > 0)
|
|
|
+ {
|
|
|
+ recvBuff[n] = 0;
|
|
|
+ if(fputs(recvBuff, stdout) == EOF)
|
|
|
+ {
|
|
|
+ printf("\n Error : Fputs error\n");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //Запуск парсера команд
|
|
|
+ processCommand(recvBuff);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (n == 0)
|
|
|
+ {
|
|
|
+ printf("\n Client closed the connection\n");
|
|
|
+ }
|
|
|
+ else if (n < 0)
|
|
|
+ {
|
|
|
+ error("Read error");
|
|
|
+ }
|
|
|
+
|
|
|
+ close(conn_fd);
|
|
|
}
|
|
|
- else if (n < 0)
|
|
|
- {
|
|
|
- error("Read error");
|
|
|
- }
|
|
|
|
|
|
- close(sockfd);
|
|
|
+ close(listen_fd);
|
|
|
+
|
|
|
munmap(bar1, REQUESTED_MEMORY_SIZE);
|
|
|
int fd_close = close(pci_fd);
|
|
|
if (fd_close == -1) {
|
|
|
perror("close");
|
|
|
return 1;
|
|
|
}
|
|
|
+
|
|
|
return 0;
|
|
|
}
|