17.4.3. Соединение с сервером

We use cookies. Read the Privacy and Cookie Policy

17.4.3. Соединение с сервером

Процесс соединения с сервером через сокет домена Unix состоит из создания сокета и присоединения к требуемому адресу через функцию connect(). Как только сокет присоединен, он может обрабатываться как любой другой файловый дескриптор.

Следующая программа подключается с тем же самым сокетом, который использовался в примере сервера, и копирует его стандартные входные данные на сервер.

 1: /* uclient.c */

 2:

 3: /* Подключиться к сокету ./sample-socket домена Unix, скопировать stdin

 4:    в сокет, после этого выйти из программы. */

 5:

 6: #include <sys/socket.h>

 7: #include <sys/un.h>

 8: #include <unistd.h>

 9:

10: #include "sockutil.h" /* некоторые служебные функции */

11:

12: int main(void) {

13:  struct sockaddr_un address;

14:  int sock;

15:  size_t addrLength;

16:

17:  if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)

18:   die("socket");

19:

20:  address.sun_family = AF_UNIX; /* сокет домена Unix */

21:  strcpy(address.sun_path, "./sample-socket");

22:

23:  /* Общая длина адреса, включая элемент

24:     sun_family */

25:  addrLength = sizeof(address.sun_family) +

26:   strlen(address.sun_path);

27:

28:  if (connect(sock, (struct sockaddr *) &address, addrLength))

29:   die("connect");

30:

31:  copyData(0, sock);

32:

33:  close(sock);

34:

35:  return 0;

36: }

Клиент не особенно отличается от сервера. Единственные изменения состоят в том, что последовательность функций bind(), listen(), accept() заменяется одним вызовом connect(), при этом копируется немного другой набор данных.