⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subnodes.h

📁 网页抓取程序
💻 H
字号:



/*
 * ensure all of data on socket comes through. f==read || f==write
 */

// http://awgn.antifork.org/codes/usr8550.c
/*
ssize_t
atomicio(f, fd, _s, n)
ssize_t(*f) ();
	int fd;
	void *_s;
	size_t n;
{
	char *s = _s;
	ssize_t res, pos = 0;

	while (n > pos) {
		res = (f) (fd, s + pos, n - pos);
		switch (res) {
		case -1:
			if (errno == EINTR || errno == EAGAIN)
				continue;
			else
				fatal("atomicio(): %s\n", strerror(errno));
		case 0:
			return (res);
		default:
			pos += res;
		}
	}
	return (pos);
}
*/


int setnonblock(SOCKET sock,int to)
{
#ifdef WIN32
	setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,(char*) &to, sizeof(int));
#else
	struct timeval timeout;
	
	timeout.tv_sec = to/1000;
	timeout.tv_usec=0;
	
	if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,(char*) &timeout, sizeof(timeout)))
		return 0;
#endif
	return 1;
}


int StartUpWinsock()
{
#ifdef WIN32
	WSADATA wsadata;
	
	if((WSAStartup(MAKEWORD(1,1),&wsadata))!=0 || (LOBYTE(wsadata.wVersion )!=1 || HIBYTE(wsadata.wVersion)!=1))
		return 0;
#endif
	return 1;
}

void EmptySocketBuffer(SOCKET sock)
{
char* msg;
    msg = malloc(100000);

    recv(sock,msg,100000,0);

    FREE(msg);
}

int ConnectToAllSubNodes()
{
unsigned int i;

    StartUpWinsock();

    for(i=0; i<subNodesStruct.saddrElements; i++)
    {
        subNodesStruct.socks[i] = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

	    if ( connect( (SOCKET)subNodesStruct.socks[i], (LPSOCKADDR) &subNodesStruct.saddrSubNodes[i], sizeof(SOCKADDR_IN) ) == SOCKET_ERROR)
        {
            printf("Node %d: Failed\n",i+1);
            subNodesStruct.isConnected[i]=0;
            closesocket(subNodesStruct.socks[i]);
        }
        else
        {
            printf("Node %d: OK\n",i+1);
            subNodesStruct.isConnected[i]=1;
            setnonblock(subNodesStruct.socks[i], 50);

			/*
			{
				int nonblocking = 1;
            	ioctlsocket(subNodesStruct.socks[i], FIONBIO, &nonblocking);
			}
			*/
        }
    }

    return 1;
}

/* ricerca OOI: invia a tutti nodi l'array delle parole che formano la query */
void SendAMessageToAllNodesOOI(unsigned int* query, int words)
{
unsigned int i;
int res;
int* msg;
    
    /* alloca il messaggio che invieremo della lunghezza dell'array + il primo 
       valore del pacchetto che identifica la lunghezza 
       PROTOCOLLO: | b | numero parole | word1 | word2 | ... | wordN | 
     */
    msg = malloc(sizeof(int)*(words+2));
    msg[0] = words;
    memcpy(msg+1,query,sizeof(int)*words);

    for(i=0; i<subNodesStruct.saddrElements; i++)
	{
        if(subNodesStruct.isConnected[i])
        {
            res = SEND(subNodesStruct.socks[i], "b");

            /* un nodo si 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -