HR's Blog

Swimming 🏊 in the sea🌊of code!

0%

BSD socket

.

BSD socket也叫做伯克利套接字

通讯domain:

  • UNIX(AF_UNIX) domain允许在同一主机上的应用程序之间进行通讯。(POSIX.1g使用名称AF_LOCAL作为AF_UNIX的同义词,但SUSv3并没有使用这个名称。)
  • IPv4(AF_INET) domain允许在使用IPv4网络链接起来的主机上的应用程序之间进行通讯。
  • IPv6(AF_INET6) domain允许在使用IPv6被设计成了IPv4的

socket类型:

  • 流:socket(SOCK_STREAM)
  • 数据报:socket(SOCK_DGRAM)

protocol参数:
一般都是指定为0;

流socket

Socket实现

创建socket:socket()

1
2
#include <sys/socket.h>
int socket(int domain, int type, int protocol);

Address

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Use LOOPBACK address
struct sockaddr_in sockaddr4;
memset(&sockaddr4, 0, sizeof(sockaddr4));

sockaddr4.sin_len = sizeof(struct sockaddr_in);
sockaddr4.sin_family = AF_INET;
sockaddr4.sin_port = 1234;
sockaddr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK);

struct sockaddr_in6 sockaddr6;
memset(&sockaddr6, 0, sizeof(sockaddr6));

sockaddr6.sin6_len = sizeof(struct sockaddr_in6);
sockaddr6.sin6_family = AF_INET6;
sockaddr6.sin6_port = htons(port);
sockaddr6.sin6_addr = in6addr_loopback;

References

Berkeley套接字