Code:
// includes
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <errno.h>
#include <sys/types.h>
#include <strings.h>
#include <unistd.h>
#include <time.h>
#include <fcntl.h>
// define constants
#define SA struct sockaddr
#define BUFFERSIZE 1024
// main program
int main(int argc, char **argv)
{
printf("Server started\n");
// define variables
fd_set read_flags,write_flags;
int listens, work, x, checking,i,wx;
struct sockaddr_in servaddr;
char buff[1024];
int clients[26];
struct timeval timer;
i=0;
// creates socket
listens = socket(AF_INET, SOCK_STREAM, 0);
// sets servaddr to all zeros
bzero(&servaddr, sizeof(servaddr));
// sets servaddr
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(2007);
// making listens socket non-blocking
x=fcntl(listens,F_GETFL,0);
fcntl(listens,F_SETFL,x | O_NONBLOCK);
// bind
if(bind(listens, (SA *) &servaddr, sizeof(servaddr))<0){
printf("Bind Failed!\n");
}
// listening
if (listen(listens, BUFFERSIZE)<0){
printf("Listen Failed!\n");
}
snprintf(buff, sizeof(buff), "Hello people, i came from a server woot");
for ( ; ; ) {
timer.tv_sec = 1;
timer.tv_usec = 0;
FD_ZERO(&read_flags);
FD_ZERO(&write_flags);
FD_SET(listens, &read_flags);
FD_SET(listens, &write_flags);
select(listens+1, &read_flags,&write_flags,(fd_set*)0,&timer);
if (FD_ISSET(listens, &read_flags)) {
FD_CLR(listens, &read_flags);
if(clients[i]=accept(listens, (SA *) NULL, NULL)>0){
std::cout << "New client " << i << ": Return: " << clients[i] << " \n";
wx=write( listens, buff, strlen(buff));
std::cout << "Returned: " << wx;
i++;
}
}
if (FD_ISSET(listens, &read_flags)) {
FD_CLR(listens, &write_flags);
std::cout << "go ahead and write\n";
}
}
}
Thats what i got so far