mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-24 15:20:02 +02:00
try for accept
This commit is contained in:
parent
c632badb55
commit
40c2d9f760
@ -126,7 +126,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
|||||||
void validate(T arg, T retval, std::string modename, numberMode hex);
|
void validate(T arg, T retval, std::string modename, numberMode hex);
|
||||||
|
|
||||||
/** Unrecognized Function */
|
/** Unrecognized Function */
|
||||||
int M_nofunc();
|
int M_nofunc(sls::DataSocket & socket);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -386,6 +386,8 @@ protected:
|
|||||||
/** Socket */
|
/** Socket */
|
||||||
MySocketTCP* mySock;
|
MySocketTCP* mySock;
|
||||||
|
|
||||||
|
std::unique_ptr<sls::ServerSocket> server{nullptr};
|
||||||
|
|
||||||
/** client interface */
|
/** client interface */
|
||||||
ServerInterface* interface;
|
ServerInterface* interface;
|
||||||
};
|
};
|
||||||
|
@ -55,13 +55,13 @@ slsReceiverTCPIPInterface::slsReceiverTCPIPInterface(int pn):
|
|||||||
|
|
||||||
// create socket
|
// create socket
|
||||||
portNumber = (pn > 0 ? pn : DEFAULT_PORTNO + 2);
|
portNumber = (pn > 0 ? pn : DEFAULT_PORTNO + 2);
|
||||||
MySocketTCP* m = new MySocketTCP(portNumber);
|
// MySocketTCP* m = new MySocketTCP(portNumber);
|
||||||
mySock = m;
|
// mySock = m;
|
||||||
interface = new ServerInterface(mySock, -1, "Receiver");
|
// interface = new ServerInterface(mySock, -1, "Receiver");
|
||||||
|
|
||||||
//initialize variables
|
//initialize variables
|
||||||
strcpy(mySock->lastClientIP,"none");
|
// strcpy(mySock->lastClientIP,"none");
|
||||||
strcpy(mySock->thisClientIP,"none1");
|
// strcpy(mySock->thisClientIP,"none1");
|
||||||
memset(mess,0,sizeof(mess));
|
memset(mess,0,sizeof(mess));
|
||||||
strcpy(mess,"dummy message");
|
strcpy(mess,"dummy message");
|
||||||
|
|
||||||
@ -86,7 +86,9 @@ void slsReceiverTCPIPInterface::stop(){
|
|||||||
if (tcpThreadCreated) {
|
if (tcpThreadCreated) {
|
||||||
FILE_LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber;
|
FILE_LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber;
|
||||||
killTCPServerThread = 1;
|
killTCPServerThread = 1;
|
||||||
if(mySock) mySock->ShutDownSocket();
|
// if(mySock) mySock->ShutDownSocket();
|
||||||
|
if(server)
|
||||||
|
server->shutDownSocket();
|
||||||
FILE_LOG(logDEBUG) << "TCP Socket closed on port " << portNumber;
|
FILE_LOG(logDEBUG) << "TCP Socket closed on port " << portNumber;
|
||||||
pthread_join(TCPServer_thread, nullptr);
|
pthread_join(TCPServer_thread, nullptr);
|
||||||
tcpThreadCreated = false;
|
tcpThreadCreated = false;
|
||||||
@ -131,49 +133,56 @@ void* slsReceiverTCPIPInterface::startTCPServerThread(void *this_pointer){
|
|||||||
return this_pointer;
|
return this_pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void slsReceiverTCPIPInterface::startTCPServer() {
|
||||||
void slsReceiverTCPIPInterface::startTCPServer(){
|
FILE_LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid)
|
||||||
FILE_LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid) << "]";;
|
<< "]";
|
||||||
FILE_LOG(logINFO) << "SLS Receiver starting TCP Server on port " << portNumber << std::endl;
|
;
|
||||||
|
FILE_LOG(logINFO) << "SLS Receiver starting TCP Server on port "
|
||||||
|
<< portNumber << std::endl;
|
||||||
int ret = OK;
|
int ret = OK;
|
||||||
|
|
||||||
while(true) {
|
server = sls::make_unique<sls::ServerSocket>(portNumber);
|
||||||
auto server = sls::ServerSocket(portNumber);
|
while (true) {
|
||||||
auto socket = server.accept();
|
|
||||||
|
try {
|
||||||
|
auto socket = server->accept();
|
||||||
ret = decode_function(socket);
|
ret = decode_function(socket);
|
||||||
// if(mySock->Connect() >= 0){
|
// if(mySock->Connect() >= 0){
|
||||||
// ret = decode_function();
|
// ret = decode_function();
|
||||||
// mySock->Disconnect();
|
// mySock->Disconnect();
|
||||||
// }
|
// }
|
||||||
|
|
||||||
//if tcp command was to exit server
|
// if tcp command was to exit server
|
||||||
if(ret == GOODBYE){
|
if (ret == GOODBYE) {
|
||||||
FILE_LOG(logINFO) << "Shutting down UDP Socket";
|
FILE_LOG(logINFO) << "Shutting down UDP Socket";
|
||||||
if(receiver){
|
if (receiver) {
|
||||||
receiver->shutDownUDPSockets();
|
receiver->shutDownUDPSockets();
|
||||||
}
|
}
|
||||||
|
|
||||||
mySock->exitServer();
|
mySock->exitServer();
|
||||||
FILE_LOG(logINFOBLUE) << "Exiting [ TCP server Tid: " << syscall(SYS_gettid) <<"]";
|
FILE_LOG(logINFOBLUE)
|
||||||
|
<< "Exiting [ TCP server Tid: " << syscall(SYS_gettid)
|
||||||
|
<< "]";
|
||||||
pthread_exit(nullptr);
|
pthread_exit(nullptr);
|
||||||
}
|
}
|
||||||
|
}catch(const sls::SocketError& e){
|
||||||
|
std::cout << "Accept failed\n";
|
||||||
|
}
|
||||||
|
|
||||||
//if user entered exit
|
// if user entered exit
|
||||||
if(killTCPServerThread) {
|
if (killTCPServerThread) {
|
||||||
if (ret != GOODBYE) {
|
if (ret != GOODBYE) {
|
||||||
if(receiver){
|
if (receiver) {
|
||||||
receiver->shutDownUDPSockets();
|
receiver->shutDownUDPSockets();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FILE_LOG(logINFOBLUE) << "Exiting [ TCP server Tid: " << syscall(SYS_gettid) <<"]";
|
FILE_LOG(logINFOBLUE)
|
||||||
|
<< "Exiting [ TCP server Tid: " << syscall(SYS_gettid) << "]";
|
||||||
pthread_exit(nullptr);
|
pthread_exit(nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int slsReceiverTCPIPInterface::function_table(){
|
int slsReceiverTCPIPInterface::function_table(){
|
||||||
flist[F_EXEC_RECEIVER_COMMAND] = &slsReceiverTCPIPInterface::exec_command;
|
flist[F_EXEC_RECEIVER_COMMAND] = &slsReceiverTCPIPInterface::exec_command;
|
||||||
flist[F_EXIT_RECEIVER] = &slsReceiverTCPIPInterface::exit_server;
|
flist[F_EXIT_RECEIVER] = &slsReceiverTCPIPInterface::exit_server;
|
||||||
@ -257,7 +266,7 @@ int slsReceiverTCPIPInterface::decode_function(sls::DataSocket &socket){
|
|||||||
|
|
||||||
if (fnum <= NUM_DET_FUNCTIONS || fnum >= NUM_REC_FUNCTIONS) {
|
if (fnum <= NUM_DET_FUNCTIONS || fnum >= NUM_REC_FUNCTIONS) {
|
||||||
FILE_LOG(logERROR) << "Unknown function enum " << fnum;
|
FILE_LOG(logERROR) << "Unknown function enum " << fnum;
|
||||||
ret = (this->M_nofunc)();
|
ret = (this->M_nofunc)(socket);
|
||||||
} else{
|
} else{
|
||||||
FILE_LOG(logDEBUG1) << "calling function fnum: "<< fnum << " "
|
FILE_LOG(logDEBUG1) << "calling function fnum: "<< fnum << " "
|
||||||
"(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ") "
|
"(" << getFunctionNameFromEnum((enum detFuncs)fnum) << ") "
|
||||||
@ -301,18 +310,23 @@ void slsReceiverTCPIPInterface::validate(T arg, T retval, std::string modename,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int slsReceiverTCPIPInterface::M_nofunc(){
|
int slsReceiverTCPIPInterface::M_nofunc(sls::DataSocket &socket){
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
|
|
||||||
// to receive any arguments
|
// to receive any arguments
|
||||||
|
|
||||||
|
socket.setReceiveTimeout(500);
|
||||||
int n = 1;
|
int n = 1;
|
||||||
while (n > 0)
|
while (n > 0)
|
||||||
n = mySock->ReceiveDataOnly(mess, MAX_STR_LENGTH);
|
n = socket.read(mess, MAX_STR_LENGTH);
|
||||||
|
|
||||||
sprintf(mess,"Unrecognized Function enum %d. Please do not proceed.\n", fnum);
|
sprintf(mess,"Unrecognized Function enum %d. Please do not proceed.\n", fnum);
|
||||||
FILE_LOG(logERROR) << mess;
|
FILE_LOG(logERROR) << mess;
|
||||||
return interface->Server_SendResult(false, ret, nullptr, 0, mess);
|
socket.sendData(&ret, sizeof(ret));
|
||||||
|
socket.sendData(mess, sizeof(mess));
|
||||||
|
return 0;
|
||||||
|
// return interface->Server_SendResult(false, ret, nullptr, 0, mess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,9 @@ class DataSocket {
|
|||||||
}
|
}
|
||||||
size_t sendData(const void *buffer, size_t size);
|
size_t sendData(const void *buffer, size_t size);
|
||||||
size_t receiveData(void *buffer, size_t size);
|
size_t receiveData(void *buffer, size_t size);
|
||||||
|
size_t read(void *buffer, size_t size);
|
||||||
int setTimeOut(int t_seconds);
|
int setTimeOut(int t_seconds);
|
||||||
|
int setReceiveTimeout(int us);
|
||||||
void close();
|
void close();
|
||||||
void shutDownSocket();
|
void shutDownSocket();
|
||||||
|
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef FILELOG_MAX_LEVEL
|
#ifndef FILELOG_MAX_LEVEL
|
||||||
#define FILELOG_MAX_LEVEL logINFO
|
// #define FILELOG_MAX_LEVEL logINFO
|
||||||
// #define FILELOG_MAX_LEVEL logDEBUG5
|
#define FILELOG_MAX_LEVEL logDEBUG5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
namespace sls {
|
namespace sls {
|
||||||
|
|
||||||
@ -43,12 +44,25 @@ size_t DataSocket::receiveData(void *buffer, size_t size) {
|
|||||||
size_t dataRead = 0;
|
size_t dataRead = 0;
|
||||||
while (dataRead < size) {
|
while (dataRead < size) {
|
||||||
dataRead +=
|
dataRead +=
|
||||||
read(getSocketId(), reinterpret_cast<char *>(buffer) + dataRead,
|
::read(getSocketId(), reinterpret_cast<char *>(buffer) + dataRead,
|
||||||
size - dataRead);
|
size - dataRead);
|
||||||
}
|
}
|
||||||
return dataRead;
|
return dataRead;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t DataSocket::read(void *buffer, size_t size){
|
||||||
|
return ::read(getSocketId(), reinterpret_cast<char *>(buffer), size);
|
||||||
|
}
|
||||||
|
|
||||||
|
int DataSocket::setReceiveTimeout(int us) {
|
||||||
|
timeval t{};
|
||||||
|
t.tv_sec = 0;
|
||||||
|
t.tv_usec = us;
|
||||||
|
return ::setsockopt(getSocketId(), SOL_SOCKET, SO_RCVTIMEO, &t,
|
||||||
|
sizeof(struct timeval));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t DataSocket::sendData(const void *buffer, size_t size) {
|
size_t DataSocket::sendData(const void *buffer, size_t size) {
|
||||||
size_t dataSent = 0;
|
size_t dataSent = 0;
|
||||||
while (dataSent < size) {
|
while (dataSent < size) {
|
||||||
|
@ -27,7 +27,7 @@ ServerSocket::ServerSocket(int port)
|
|||||||
if (bind(getSocketId(), (struct sockaddr *)&serverAddr,
|
if (bind(getSocketId(), (struct sockaddr *)&serverAddr,
|
||||||
sizeof(serverAddr)) != 0) {
|
sizeof(serverAddr)) != 0) {
|
||||||
close();
|
close();
|
||||||
throw std::runtime_error("Server ERROR: cannot bind socket");
|
throw sls::SocketError("Server ERROR: cannot bind socket");
|
||||||
}
|
}
|
||||||
if (listen(getSocketId(), DEFAULT_BACKLOG) != 0) {
|
if (listen(getSocketId(), DEFAULT_BACKLOG) != 0) {
|
||||||
close();
|
close();
|
||||||
@ -41,7 +41,7 @@ DataSocket ServerSocket::accept() {
|
|||||||
int newSocket =
|
int newSocket =
|
||||||
::accept(getSocketId(), (struct sockaddr *)&clientAddr, &addr_size);
|
::accept(getSocketId(), (struct sockaddr *)&clientAddr, &addr_size);
|
||||||
if (newSocket == -1) {
|
if (newSocket == -1) {
|
||||||
throw std::runtime_error("Server ERROR: socket accept failed\n");
|
throw sls::SocketError("Server ERROR: socket accept failed\n");
|
||||||
}
|
}
|
||||||
inet_ntop(AF_INET, &(clientAddr.sin_addr), &thisClient_.front(),
|
inet_ntop(AF_INET, &(clientAddr.sin_addr), &thisClient_.front(),
|
||||||
INET_ADDRSTRLEN);
|
INET_ADDRSTRLEN);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user