комменты... комменты... комменты...
This commit is contained in:
parent
e0b307f190
commit
600efc28d5
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue