int gulm_cluster_send_message(void *buf, int msglen, const char *csid, const char *errtext)
{
    int status=0;

    DEBUGLOG("cluster send message, csid = %p, msglen = %d\n", csid, msglen);

    /* If csid is NULL then send to all known (not just connected) nodes */
    if (!csid)
    {
	void *context = NULL;
	char loop_csid[GULM_MAX_CSID_LEN];

	/* Loop round all gulm-known nodes */
	while (get_next_node_csid(&context, loop_csid))
	{
	    status = tcp_send_message(buf, msglen, loop_csid, errtext);
	    if (status == 0 ||
		(status < 0 && (errno == EAGAIN || errno == EINTR)))
		break;
	}
    }
    else
    {

	status = tcp_send_message(buf, msglen, csid, errtext);
    }
    return status;
}
Ejemplo n.º 2
0
void tcp_send_recv(int server_socket) {
    int max_sock;
    fd_set all_sockets;
    fd_set read_sockets;


    printf("$: ");
    fflush(stdout);
    FD_ZERO(&all_sockets);
    FD_ZERO(&read_sockets);
    FD_SET(server_socket, &all_sockets);
    FD_SET(0, &all_sockets);
    max_sock = server_socket;


    while(1) {
        read_sockets = all_sockets;
        if (select(server_socket + 1, &read_sockets, NULL, NULL, NULL) < 0) {
            perror("select");
            exit(1);
        }

        if (FD_ISSET(server_socket, &read_sockets)) {
            if (get_pkt(server_socket) != 0) {
                FD_CLR(server_socket, &all_sockets);
                exit(0);
            }
            else {
                printf("$: ");
                fflush(stdout);
            }
        }
        if (FD_ISSET(0, &read_sockets)) {
            tcp_send_message(server_socket);
        }
    }
}