【linux】56、socket
程序员文章站
2022-05-26 23:52:39
...
1、通信domain
AF代表"地址族",PF代表"协议族"
UNIX(AF_UNIX):允许在同一主机上的应用程序之间通信。
IPv4(AF_INET)
IPv6(AF_INET6)
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
4、流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
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的地址。