Working on the socket server now.
This commit is contained in:
parent
7859ac9d39
commit
2b8101ddf6
3 changed files with 65 additions and 14 deletions
6
Makefile
6
Makefile
|
@ -45,7 +45,7 @@ FFTW_PACKAGE = fftw-3.3.3
|
||||||
|
|
||||||
.PHONY: clean-vect clean
|
.PHONY: clean-vect clean
|
||||||
all: csdr ddcd
|
all: csdr ddcd
|
||||||
libcsdr.so: fft_fftw.c fft_rpi.c libcsdr_wrapper.c libcsdr.c libcsdr_gpl.c
|
libcsdr.so: fft_fftw.c fft_rpi.c libcsdr_wrapper.c libcsdr.c libcsdr_gpl.c *.h
|
||||||
@echo NOTE: you may have to manually edit Makefile to optimize for your CPU \(especially if you compile on ARM, please edit PARAMS_NEON\).
|
@echo NOTE: you may have to manually edit Makefile to optimize for your CPU \(especially if you compile on ARM, please edit PARAMS_NEON\).
|
||||||
@echo Auto-detected optimization parameters: $(PARAMS_SIMD)
|
@echo Auto-detected optimization parameters: $(PARAMS_SIMD)
|
||||||
@echo
|
@echo
|
||||||
|
@ -54,8 +54,8 @@ libcsdr.so: fft_fftw.c fft_rpi.c libcsdr_wrapper.c libcsdr.c libcsdr_gpl.c
|
||||||
-./parsevect dumpvect*.vect
|
-./parsevect dumpvect*.vect
|
||||||
csdr: csdr.c libcsdr.so
|
csdr: csdr.c libcsdr.so
|
||||||
gcc -std=gnu99 $(PARAMS_LOOPVECT) $(PARAMS_SIMD) csdr.c $(PARAMS_LIBS) -L. -lcsdr $(PARAMS_MISC) -o csdr
|
gcc -std=gnu99 $(PARAMS_LOOPVECT) $(PARAMS_SIMD) csdr.c $(PARAMS_LIBS) -L. -lcsdr $(PARAMS_MISC) -o csdr
|
||||||
ddcd: ddcd.c libcsdr.so
|
ddcd: ddcd.cpp libcsdr.so ddcd.h
|
||||||
gcc -std=gnu99 $(PARAMS_LOOPVECT) $(PARAMS_SIMD) ddcd.c $(PARAMS_LIBS) -L. -lcsdr $(PARAMS_MISC) -o ddcd
|
g++ $(PARAMS_LOOPVECT) $(PARAMS_SIMD) ddcd.cpp $(PARAMS_LIBS) -L. -lcsdr $(PARAMS_MISC) -o ddcd
|
||||||
arm-cross: clean-vect
|
arm-cross: clean-vect
|
||||||
#note: this doesn't work since having added FFTW
|
#note: this doesn't work since having added FFTW
|
||||||
arm-linux-gnueabihf-gcc -std=gnu99 -O3 -fshort-double -ffast-math -dumpbase dumpvect-arm -fdump-tree-vect-details -mfloat-abi=softfp -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mvectorize-with-neon-quad -Wno-unused-result -Wformat=0 $(SOURCES) -lm -o ./csdr
|
arm-linux-gnueabihf-gcc -std=gnu99 -O3 -fshort-double -ffast-math -dumpbase dumpvect-arm -fdump-tree-vect-details -mfloat-abi=softfp -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mvectorize-with-neon-quad -Wno-unused-result -Wformat=0 $(SOURCES) -lm -o ./csdr
|
||||||
|
|
|
@ -28,19 +28,28 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "ddcd.h"
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#define SOFTWARE_NAME "ddcd"
|
#define SOFTWARE_NAME "ddcd"
|
||||||
#define MSG_START SOFTWARE_NAME ": "
|
#define MSG_START SOFTWARE_NAME ": "
|
||||||
|
|
||||||
struct client_s
|
typedef struct client_s
|
||||||
{
|
{
|
||||||
|
struct sockaddr_in addr;
|
||||||
int socket;
|
int socket;
|
||||||
int addr;
|
pid_t pid;
|
||||||
|
int pipefd[2];
|
||||||
} client_t;
|
} client_t;
|
||||||
|
|
||||||
int host_port = 0;
|
int host_port = 0;
|
||||||
|
@ -51,9 +60,6 @@ int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
//arguments:
|
|
||||||
|
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
|
@ -87,14 +93,58 @@ int main(int argc, char* argv[])
|
||||||
if(!decimation) { fprintf(stderr, MSG_START "missing required command line argument, --decimation.\n"); exit(1); }
|
if(!decimation) { fprintf(stderr, MSG_START "missing required command line argument, --decimation.\n"); exit(1); }
|
||||||
if(!host_port) { fprintf(stderr, MSG_START "missing required command line argument, --port.\n"); exit(1); }
|
if(!host_port) { fprintf(stderr, MSG_START "missing required command line argument, --port.\n"); exit(1); }
|
||||||
|
|
||||||
/*struct sockaddr_in addr_host;
|
struct sockaddr_in addr_host;
|
||||||
int listen_socket;
|
int listen_socket;
|
||||||
std::vector<client_t> clients;
|
std::vector<client_t*> clients(10);
|
||||||
listen_socket=socket(AF_INET,SOCK_STREAM,0);
|
listen_socket=socket(AF_INET,SOCK_STREAM,0);
|
||||||
memset(&addr_host,'0',sizeof(addr_host));
|
memset(&addr_host,'0',sizeof(addr_host));
|
||||||
addr_host.sin_family=AF_INET;
|
addr_host.sin_family=AF_INET;
|
||||||
addr_host.sin_port=htons(8888);
|
addr_host.sin_port=htons(host_port);
|
||||||
addr_host.sin_addr.s_addr=inet_addr("127.0.0.1");
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
if( (addr_host.sin_addr.s_addr=inet_addr(host_address)) == INADDR_NONE)
|
||||||
|
{ fprintf(stderr, MSG_START "invalid host address.\n"); exit(1); }
|
||||||
|
|
||||||
|
if( bind(listen_socket, (struct sockaddr*) &addr_host, sizeof(addr_host)) < 0)
|
||||||
|
{ fprintf(stderr, MSG_START "cannot bind() address to the socket.\n"); exit(1); }
|
||||||
|
|
||||||
|
if( listen(listen_socket, 10) == -1)
|
||||||
|
{ fprintf(stderr, MSG_START "cannot listen() on socket.\n"); exit(1); }
|
||||||
|
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
struct sockaddr_in addr_cli;
|
||||||
|
socklen_t addr_cli_len;
|
||||||
|
int new_socket;
|
||||||
|
|
||||||
|
if( (new_socket = accept(listen_socket, (struct sockaddr*)&addr_cli, &addr_cli_len)) == -1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, MSG_START "cannot accept() a connection.\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
client_t* new_client = new client_t;
|
||||||
|
memcpy(&new_client->addr, &addr_cli, sizeof(new_client->addr));
|
||||||
|
new_client->socket = new_socket;
|
||||||
|
|
||||||
|
if(new_client->pid = fork())
|
||||||
|
{
|
||||||
|
//We're the parent
|
||||||
|
clients.push_back(new_client);
|
||||||
|
printf("client pid: %d\n", new_client->pid);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//We're the client
|
||||||
|
client();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void client()
|
||||||
|
{
|
||||||
|
printf("I'm the client\n");
|
||||||
|
for(;;) sleep(1);
|
||||||
}
|
}
|
1
ddcd.h
Normal file
1
ddcd.h
Normal file
|
@ -0,0 +1 @@
|
||||||
|
void client();
|
Loading…
Reference in a new issue