комменты... комменты... комменты...

This commit is contained in:
Kolan Sh 2011-05-02 21:51:34 +04:00
parent e0b307f190
commit 600efc28d5
1 changed files with 24 additions and 21 deletions

View File

@ -30,25 +30,28 @@ void *serv_request(void *data)
struct connection_cb *connections = NULL;
int listenSocket = *(int *)data;
if (fcntl(listenSocket, F_SETFL, O_NONBLOCK) < 0)
int listenSocket = *(int *)data; // дескриптор сокета передаётся через аргумент pthread
if (fcntl(listenSocket, F_SETFL, O_NONBLOCK) < 0) // делает сокет неблокирующим
die("fcntl()", errno);
while (1) {
fd_set readFdSet;
fd_set writeFdSet;
struct connection_cb *currentConn, **currentConnPtr, *tempConn;
int maxFdNum;
fd_set readFdSet; // набор дескрипторов сокетов, с кт. в данный момент идёт чтение
fd_set writeFdSet; // набор дескрипторов сокетов, в кт. в данный момент идёт запись
struct connection_cb *currentConn, **currentConnPtr, *tempConn; // выбранное соединение, ???, ???
int maxFdNum; // ???
FD_ZERO(&readFdSet);
FD_ZERO(&writeFdSet);
FD_ZERO(&readFdSet); // очистка набора дескрипторов чтения
FD_ZERO(&writeFdSet); // очистка набора дескрипторов записи
/*
Добавление дескриптора к множеству readFdSet
* Добавление дескриптора к множеству readFdSet
*/
FD_SET(listenSocket, &readFdSet);
maxFdNum = listenSocket;
FD_SET(listenSocket, &readFdSet); // слушающий порт добавляется в список читающих (сюда же входит connect())
maxFdNum = listenSocket; // ??? не разобрался
/*
* Разделение дескрипторов м/у множествами readFdSet и writeFdSet
*/
for (currentConn = connections; currentConn != NULL; currentConn = currentConn->next) {
if (currentConn->isReading)
FD_SET(currentConn->dataSocket, &readFdSet);
@ -56,8 +59,9 @@ void *serv_request(void *data)
FD_SET(currentConn->dataSocket, &writeFdSet);
maxFdNum = currentConn->dataSocket > maxFdNum ? currentConn->dataSocket : maxFdNum;
}
/*
Получение множества дескрипторов сокетов для обработки
* Получение множества дескрипторов сокетов для обработки (ожидание изменения состояния на сокетах)
*/
if (select(maxFdNum + 1, &readFdSet, &writeFdSet, NULL, NULL) < 0) {
if (errno == EINTR)
@ -70,10 +74,9 @@ void *serv_request(void *data)
while (*currentConnPtr != NULL) {
/*
Проверка принадлежности дескриптора
(*currentConnPtr)->dataSocket к множеству readFdSet
* Проверка принадлежности дескриптора
* (*currentConnPtr)->dataSocket к множеству readFdSet
*/
if ((*currentConnPtr)->isReading && FD_ISSET((*currentConnPtr)->dataSocket, &readFdSet)) {
int result = recv((*currentConnPtr)->dataSocket, (*currentConnPtr)->data,
sizeof((*currentConnPtr)->data), 0);
@ -100,10 +103,11 @@ void *serv_request(void *data)
printf("Recieving as Slave Thread id = '%d' \n", (int)pthread_self());
}
} else
/*
Проверка принадлежности дескриптора
(*currentConnPtr)->dataSocket к множеству writedFdSet
*/
/*
* Проверка принадлежности дескриптора
* (*currentConnPtr)->dataSocket к множеству writedFdSet
*/
if (FD_ISSET((*currentConnPtr)->dataSocket, &writeFdSet)) {
int result = send((*currentConnPtr)->dataSocket,
(*currentConnPtr)->data + (*currentConnPtr)->dataSent,
@ -132,10 +136,9 @@ void *serv_request(void *data)
/*
Проверка принадлежности дескриптора listenSocket
к множеству readFdSet,т.е. необходимости обработать
вызов connect( ) от нового клиента.
вызов connect() от нового клиента.
*/
if (FD_ISSET(listenSocket, &readFdSet)) {
while (1) {
int result = accept(listenSocket, (struct sockaddr *)NULL, NULL);