> For the complete documentation index, see [llms.txt](https://dimitar-minchev.gitbook.io/linux-system-programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dimitar-minchev.gitbook.io/linux-system-programming/07_sockets/03_unix_sockets.md).

# Използване на Unix сокети

```c
#include<sys/types.h>
#include<sys/socket.h>

int socket(int domain, int type, int protocol);
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
```

* **socket()** създава крайна точка за комуникация и връща дескриптор на файла, който се отнася до тази крайна точка.
  * домейнът (*Термин на Английски език: domain*) определя семейството протоколи, което ще се използва: **AF\_UNIX**, **AF\_LOCAL**, **AF\_INET**.
  * Тип (*Термин на Английски език: type*) определя комуникационната семантика: **SOCK\_STREAM** или **SOCK\_DGRAM**.
* Когато се създава сокет със **socket()**, то той съществува в именованото пространство (адресното пространство), но няма зададен адрес.
* **bind()** присвоява адреса, посочен в **addr**, на сокета, посочен от файловият дескриптор **sockfd** върнат от метода socket().
* **sockaddr** има следната структура:

```c
struct sockaddr {
   sa_family_t sa_family;
   char sa_data[14];
}
```
