📄 server.h
字号:
void CreateHandleConnectionThread(struct sHandleConnection* struct_connection)
{
#ifdef WIN32
_beginthreadex(NULL,0,HandleConnection,(void*)struct_connection,0,NULL);
#else
int errorCode;
pthread_t ptTmp;
if( (errorCode=pthread_create(&ptTmp, NULL, HandleConnection, (void*)struct_connection)) != 0 )
{
printf("\r\nThread error (%i):\r\n",errorCode);
perror(" - pthread_create() ");
exit(0);
}
#endif
}
/*OWS Server*/
int ListenToPort(int port, SOCKET* fd)
{
SOCKADDR_IN saddr;
*fd=socket(AF_INET,SOCK_STREAM,0);
#ifdef WIN32
if (*fd==INVALID_SOCKET)
#else
if (*fd<0)
#endif
return -1;
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr= htonl(INADDR_ANY);
saddr.sin_port = htons((unsigned short int)port);
if (bind(*fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR)
return -2;
if (listen(*fd,100) == SOCKET_ERROR)
return -3;
return 1;
}
int StartOWSServer(unsigned int port)
{
int ret;
struct sHandleConnection* struct_connection;
SOCKADDR_IN owsServer_client_addr;
int sin_size;
SOCKET OWS_Server_fd;
SOCKET OWS_Server_fd_conn;
sin_size=sizeof(SOCKADDR_IN);
ret = ListenToPort((int)port, &OWS_Server_fd);
switch(ret)
{
case -1:
printf("\r\n\r\nOpenWebSpider Server: socket() error\r\n\r\n");
return 0;
break;
case -2:
printf("\r\n\r\nOpenWebSpider Server: bind() error\r\n\r\n");
return 0;
break;
case -3:
printf("\r\n\r\nOpenWebSpider Server: listen() error\r\n\r\n");
return 0;
break;
case 1:
/* wait for a connection */
while(1)
{
OWS_Server_fd_conn=accept(OWS_Server_fd, (struct sockaddr *)&owsServer_client_addr, &sin_size);
if(glQuit==1)
break;
#ifdef WIN32
if (OWS_Server_fd_conn==INVALID_SOCKET)
#else
if (OWS_Server_fd_conn<0)
#endif
continue;
//memory is freed in the function HandleConnection()
struct_connection = malloc(sizeof(struct sHandleConnection));
struct_connection->sock = OWS_Server_fd_conn;
memcpy(&struct_connection->client,&owsServer_client_addr, sizeof(SOCKADDR_IN));
CreateHandleConnectionThread(struct_connection);
}
closesocket(OWS_Server_fd);
return 0;
}
closesocket(OWS_Server_fd);
return 0;
}
#ifdef WIN32
unsigned __stdcall
#else
void*
#endif
HandleConnection(void* connection)
{
SOCKET sock = ((struct sHandleConnection*)connection)->sock;
char query[MAXQUERYSIZE];
char origQuery[MAXQUERYSIZE];
char search_query[MAXQUERYSIZE];
char bufIn[2];
unsigned int queryArray[MAXWORDSxQUERY];
unsigned int query_elements;
int x,i;
int rec;
DWORD gtc;
RANKS* rankRes;
char* res;
int connOK;
int sortResults;
int fromBinaryQuery;
char* pp, *pp2;
int lLimit, rLimit;
int freeQuerySlot;
int numResults;
int *msg;
char *text_query;
connOK = 1;
while(connOK)
{
if(glQuit==1)
break;
memset(query,0,MAXQUERYSIZE);
memset(queryArray,0,MAXWORDSxQUERY);
rec=1;
x=0;
query_elements = 0;
fromBinaryQuery = 0;
search_query[0] = 0;
while(rec)
{
/* se la query
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -