Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "server.h"
- static struct netconn *session[100];
- static int free_session[100];
- static int session_index;
- int find_free_session(void);
- void client (void *args){
- struct netbuf * netBuf = netbuf_new ();
- int cl, rc;
- char buf[100];
- char message[] = "Message received\n";
- cl = *(int*)args;
- free_session[cl] = 1;
- printf("Connected: %i\n", cl);
- while(1){
- rc = netconn_recv(session[cl], &netBuf);
- if(rc != ERR_OK){
- fprintf(stderr, "Disconnected: %i\n", cl);
- free_session[cl] = 0;
- netconn_disconnect(session[cl]);
- netconn_delete(session[cl]);
- break;
- }
- netbuf_copy(netBuf, (void **)&buf, 100);
- printf("Received from %i : %s", cl, buf);
- netconn_write(session[cl], message, strlen(message), NETCONN_COPY);
- netbuf_delete(netBuf);
- }
- }
- int find_free_session(void){
- int i;
- for(i=0; i<100; i++)
- if(free_session[i] == 0)
- return i;
- return -1;
- }
- void server(void *args){
- int rc;
- struct ip_addr listenaddr = { 0 };
- struct netconn *listener;
- args = args;
- listener = netconn_new(NETCONN_TCP);
- rc = netconn_bind(listener, &listenaddr, PORT);
- VDIE(rc != ERR_OK, "netconn_bind");
- rc = netconn_listen(listener);
- VDIE(rc != ERR_OK, "netconn_listen");
- while(1){
- /* Wait for the internal semaphore so we know when a new connection arived */
- sys_arch_sem_wait(&listener->acceptmbox->not_empty, 0);
- session_index = find_free_session();
- if(session_index == -1)
- continue;
- netconn_accept(listener, &session[session_index]);
- create_thread("client", client, (void *)&session_index);
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement