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

This commit is contained in:
Kolan Sh 2011-05-02 21:51:34 +04:00
parent e0b307f190
commit 600efc28d5

View File

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