欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【linux】56、socket

程序员文章站 2022-05-26 23:52:39
...

1、通信domain

AF代表"地址族",PF代表"协议族"
UNIX(AF_UNIX):允许在同一主机上的应用程序之间通信。
IPv4(AF_INET)
IPv6(AF_INET6)
【linux】56、socket

2、创建一个socket:socket()

#include <sys/socket.h>
int socket(int domain, int type, int protocol);
success, file descriptor;error, -1

type:(1) 流socket:SOCK_STREAM (2) 数据包socket:SOCK_DGRAM

3、将socket绑定到地址:bind()

#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
//success 0; error, -1

【linux】56、socket

4、流socket

【linux】56、socket

5、监听接入连接:listen()

#include <sys/socket.h>
int listen(int sockfd, int backlog);
//success, 0; error, -1

backlog:未决连接的数量 (<sys/socket.h>定义SOMAXONN常量128, 可以在/proc/sys/net/core/somaxconn修改)

6、接收连接:accept()

#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
//success, file descriptor; error, -1

7、连接到对等socket:connect()

#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklent_t addrlen);
//success 0; error, -1

8、数据包socket

【linux】56、socket

9、交换数据包:recvfrom()和sendto()

#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
//retrun number of bytes received, 0 on EOF, or -1 on error;

ssize_t sendto(int sockfd, const void *buffer, size_t length, int flags, cosnt struct sockaddr *dest_addr, socklen_t addrlen);
//returns number of bytes sent, or -1 on error

src_addr 和addrlen :用来获取或指定与之通信的对等socket的地址。

相关标签: 程序 c语言