Теория и практика программирования на Си в Unix

       

Определение параметров сокета


Наиболее интересными опциями являются:
- TCP_NODELAY: запрещает хранение данных в буферах TCP;
- SO_ERROR: пересылает значение переменной so_error, определяемой в файле <sys/socketvar.h>;
- SO_KEEPALIVE: периодическая передача контрольных сообщений на сокет в режиме установления соединения.
Если один из процессов не отвечает, соединение считается прерванным и в переменной so_error возвращается ошибка ETIMEDOUT (см. оп-цию SO_ERROR); - SO_RCVBUF и SO_SNDBUF: определяет размер буферов TCP. Характеристики можно улучшить, взяв буферы большего размера;
- SO_REUSEADDR: позволяет повторно использовать уже использованный сокет-адрес (в частности, номер порта).

ПРОГРАММА 27 /* изменение размера буферов (tampon) TCP ***************/ #include "soct.h" int buffsize = 8192;

main() { int sock; /* дескриптор сокета */ int optval; /* значение опции */ int optlen; /* длина optval */

/* создание сокета */ sock = socket(AF_INET, SOCK_STREAM, 0);

/* считывание и модификация длины буфера TCP */ optlen = sizeof(optval);

getsockopt(sock, SOL_SOCKET, SO_SNDBUF, &optval, &optlen); printf("recvbuffsize %d\n", optval); getsockopt(sock, SOL_SOCKET, SO_RCVBUF, &optval, &optlen); printf("sendbuffsize %d\n", optval); setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &buffsize, sizeof(buffsize)); setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &buffsize, sizeof(buffsize)); }



Содержание раздела