An example of a netpp server main loop. If the CONFIG_* variables are defined, the server listens on both USB and TCP ports. Note that concurrent property accesses must be handled by the user. The netpp library does not implement locking.
#ifdef DEBUG #define DEB(x) x #endif #include "slave.h" #include "devlib_error.h" #include <stdio.h> int start_server(int argc, char **argv) { #ifdef CONFIG_UDP ServerContext udpserv; #endif #ifdef CONFIG_USBFIFO RemoteDevice usb; #endif #ifdef CONFIG_DEVICE const char *devname = NULL; RemoteDevice dev; #endif #ifdef CONFIG_TCP ServerContext tcpserv; #endif int error; #if defined(CONFIG_UDP) // || defined (CONFIG_TCP) ServerContext discoveryserv; #endif #if defined(CONFIG_UDP) || defined (CONFIG_TCP) int port = DEFAULT_LISTEN_PORT; #endif serverports_init(); #ifdef CONFIG_DEVICE if (argc >= 2) { devname = argv[1]; dev.peer.user = (void *) devname; error = dev_server_init(&dev.peer); if (error < 0) { printf("Error initializing DEV server\n"); return -1; } printf("Using device %s\n", devname); } #endif #ifdef CONFIG_USBFIFO error = usb_server_init(&usb.peer); if (error < 0) { printf("Error initializing USB\n"); return -1; } printf("Listening to USBFIFO\n"); #endif #if defined(CONFIG_UDP) // || defined (CONFIG_TCP) error = udp_server_init(DISCOVERY_PORT, &discoveryserv); if (error < 0) { printf("Error initializing discovery protocol UDP server\n"); return -1; } printf("ProbeServer listening on UDP Port %d...\n", DISCOVERY_PORT); #endif #ifdef CONFIG_UDP error = udp_server_init(port, &udpserv); if (error < 0) { printf("Error initializing socket\n"); return -1; } printf("Listening on UDP Port %d...\n", port); #endif #ifdef CONFIG_TCP error = tcp_server_init(port, &tcpserv); if (error < 0) { printf("Error initializing socket\n"); return -1; } printf("Listening on TCP Port %d...\n", port); #endif #ifdef DEBUG printf("Servers running:\n"); portbay_list(GET_PORTROOT()); printf("------------------------\n"); #endif while (1) { // Serve USB: #ifdef CONFIG_USBFIFO slave_handler(&usb); #endif #ifdef CONFIG_DEVICE if (devname) slave_handler(&dev); #endif #if defined(CONFIG_UDP) // || defined (CONFIG_TCP) error = udp_listen_incoming(&discoveryserv, 1); if (error < 0) { printf("UDP discovery server error\n"); error = DCERR_COMM_DISCONNECT; break; } #endif #ifdef CONFIG_UDP error = udp_serve(&udpserv); if (error < 0) { printf("UDP server error\n"); error = DCERR_COMM_DISCONNECT; break; } #endif // First, we serve existing (logged in) TCP users #ifdef CONFIG_TCP error = net_serve_users(&tcpserv); if (error < 0) { printf("TCP server error\n"); error = DCERR_COMM_DISCONNECT; break; } // Here, we listen to new incoming connections error = tcp_listen_incoming(&tcpserv); if (error < 0) { printf("TCP listen error\n"); break; } #endif } // We clean up: #ifdef CONFIG_TCP net_disconnect_users(&tcpserv); tcp_server_exit(&tcpserv); #endif #ifdef CONFIG_UDP net_disconnect_users(&udpserv); udp_server_exit(&udpserv); #endif return error; }