Курсовая работа: Реализация сети в операционной системе Linux
struct timer_list timer; /* This is the sock cleanup timer. */
struct timeval stamp;
/* Identd and reporting IO signals */
struct socket *socket;
/* RPC and TUX layer private data */
void *user_data;
/* Callbacks */
void (*state_change)(struct sock *sk);
void (*data_ready)(struct sock *sk,int bytes);
void (*write_space)(struct sock *sk);
void (*error_report)(struct sock *sk);
int (*backlog_rcv) (struct sock *sk,
struct sk_buff *skb);
void (*destruct)(struct sock *sk);
};
Эта структура очень широко используется и имеет много hacksзависящих от конфигурации как видим для каждого протокола здесь найдется местечко
Сокеты проходят через процесс маршрутизации только один раз для каждого маршрута. Они содержат указатель на маршрут structsock- >dst_cache* и вызывают ip_route_connect (net/route.h) для нахождения маршрута информация записывается в dst_cacheи сокет дальше использует её не повторяя операции поиска маршрута пока не случится что-то необычное в этом и есть смысл connect
Установление соединения
Рассмотрим стандартный пример
/* lookuphost */
server = gethostbyname(SERVER_NAME);
/* get socket */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
/* set up address */
address.sin_family = AF_INET;
address.sin_port = htons(PORT_NUM);
memcpy(&address.sin_addr,server->h_addr,server->h_length);
/* connect to server */
connect(sockfd, &address, sizeof(address));