относительно функции:
void forward(int clientslist[MAXCLIENTS], char* msg)
и
send(clientslist[x], msg, sizeof(msg), 0);
Выражение: sizeof(msg)
вернет значение (в зависимости от используемого оборудования и определенных параметров компилятора) 4 или 8 Не то, что вы хотите. Предложите передать фактическое количество байтов для передачи.
относительно функции:
void forward(int clientslist[MAXCLIENTS], char* msg)
и оператора:
return;
Оператор return;
совершенно не нужен , Предложите удалить это утверждение.
относительно:
int s = socket(AF_INET, SOCK_STREAM, 0);
Это утверждение может завершиться ошибкой. Всегда проверяйте (если сокет <0), затем обрабатывайте ошибку </p>
, касающуюся:
server.sin_addr.s_addr = INADDR_ANY;
INADDR_ANY
имеет значение: "0.0.0.0", которое не может быть назначено напрямую. Предложите:
server.sin_addr.s_addr = htonl(INADDR_ANY);
OT: относительно:
bind(s, (struct sockaddr*) &server, sizeof(server));
и
listen(s, MAXCLIENTS);
Эти функции могут не работать. Всегда проверяйте возвращаемое значение, чтобы убедиться, что операция прошла успешно.
OT: относительно:
void* msg = (char *) malloc(MAXMSG+1);
и аналогичных операторов. В C возвращается тип void*
, который может быть назначен любому указателю. Приведение просто загромождает код и подвержено ошибкам. даже это утверждение имеет ошибку в приведении. Предложите удалить это приведение.
относительно:
readlist = socketlist;
select(FD_SETSIZE, &readlist, NULL, NULL, NULL);
for (i=0; i<max+1; i++)
{
if(FD_ISSET(i, &readlist))
{
if (i == s)
{
Эта кодовая последовательность вызывает последовательную обработку входящих сокетов. Намного лучше создать «пул потоков», затем использовать accept () и передать полученный клиентский сокет свободному потоку. Затем поток выполняет всю связь с клиентом, а затем, по окончании работы с клиентом, закрывает сокет клиента.
относительно:
select(FD_SETSIZE, &readlist, NULL, NULL, NULL);
У клиента уже должен быть открытый сокет, которого нет, поэтому связь отсутствует.
могут быть другие проблемы, но это должно направить вас в правильном направлении.