static void network_client_connect_trap(WORD addr, void *data) { BYTE *buf; size_t buf_size; BYTE recv_buf4[4]; event_list_state_t *settings_list; /* Set proper settings */ if (resources_set_event_safe() < 0) ui_error("Warning! Failed to set netplay-safe settings."); /* Receive settings that need to be same as on server */ if (network_recv_buffer(network_socket, recv_buf4, 4) < 0) return; buf_size = (size_t)util_le_buf4_to_int(recv_buf4); buf = lib_malloc(buf_size); if (network_recv_buffer(network_socket, buf, buf_size) < 0) return; settings_list = network_create_event_list(buf); lib_free(buf); event_playback_event_list(settings_list); event_clear_list(settings_list); lib_free(settings_list); /* read the snapshot */ if (machine_read_snapshot(snapshotfilename, 0) != 0) { #ifdef HAS_TRANSLATION ui_error(translate_text(IDGS_CANNOT_OPEN_SNAPSHOT_FILE_S), snapshotfilename); #else ui_error(_("Cannot open snapshot file %s"), snapshotfilename); #endif lib_free(snapshotfilename); return; } current_send_frame = 0; last_received_frame = 0; network_mode = NETWORK_CLIENT; network_test_delay(); lib_free(snapshotfilename); }
int network_start_server(void) { vice_network_socket_address_t * server_addr = NULL; int ret = -1; do { if (network_mode != NETWORK_IDLE) break; server_addr = vice_network_address_generate(server_bind_address, server_port); if ( ! server_addr ) { break; } listen_socket = vice_network_server(server_addr); if ( ! listen_socket ) { break; } /* Set proper settings */ if (resources_set_event_safe() < 0) { ui_error("Warning! Failed to set netplay-safe settings."); } network_mode = NETWORK_SERVER; vsync_suspend_speed_eval(); ui_display_statustext(translate_text(IDGS_SERVER_IS_WAITING_FOR_CLIENT), 1); ret = 0; } while (0); if (server_addr) { vice_network_address_close(server_addr); } return ret; }
int network_start_server(void) { #ifdef HAVE_IPV6 struct sockaddr_in6 server_addr6; #endif int return_value; struct sockaddr_in server_addr; if (network_init() < 0) return -1; if (network_mode != NETWORK_IDLE) return -1; #ifdef HAVE_IPV6 if (netplay_ipv6) { bzero((char*)&server_addr6, sizeof(struct sockaddr_in6)); server_addr6.sin6_port = htons(server_port); server_addr6.sin6_family = PF_INET6; server_addr6.sin6_addr=in6addr_any; } else { #endif server_addr.sin_port = htons(server_port); server_addr.sin_addr.s_addr = htonl(0); server_addr.sin_family = PF_INET; #ifndef MINIX_SUPPORT memset(server_addr.sin_zero, 0, sizeof(server_addr.sin_zero)); #endif #ifdef HAVE_IPV6 } if (netplay_ipv6) listen_socket = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP); else #endif listen_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if (listen_socket == INVALID_SOCKET) return -1; #ifdef HAVE_IPV6 if (netplay_ipv6) return_value=bind(listen_socket, (struct sockaddr *)&server_addr6, sizeof(server_addr6)); else #endif return_value=bind(listen_socket, (struct sockaddr *)&server_addr, sizeof(server_addr)); if (return_value < 0) { closesocket(listen_socket); return -1; } if (listen(listen_socket, 2) < 0) { closesocket(listen_socket); return -1; } /* Set proper settings */ if (resources_set_event_safe() < 0) ui_error("Warning! Failed to set netplay-safe settings."); network_mode = NETWORK_SERVER; vsync_suspend_speed_eval(); #ifdef HAS_TRANSLATION ui_display_statustext(translate_text(IDGS_SERVER_IS_WAITING_FOR_CLIENT), 1); #else ui_display_statustext(_("Server is waiting for a client..."), 1); #endif return 0; }