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; }
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); } } }