酒店网站制作策划,网站模板及素材,成都幕墙设计公司,建设网站对于电商的作用是?这篇文章只有Linux网络通信基础API大参数信息#xff0c;和返回值#xff0c;这篇文章并没有这些基础API的参数类型介绍。accept的第二个参数可以查看客户端信息。
创建socket #include sys/types.h /* See NOTES */#include sys/socket.hint sock…这篇文章只有Linux网络通信基础API大参数信息和返回值这篇文章并没有这些基础API的参数类型介绍。accept的第二个参数可以查看客户端信息。
创建socket #include sys/types.h /* See NOTES */#include sys/socket.hint socket(int domain, int type, int protocol);
该函数可以创建一个socket
参数
domain告诉系统使用那个底层协议。对TCP/IP协议族而言该参数应该设置为PF_INET用于IPv4或PF_INET6用于IPv6对于UNIX本地协议族而言应设为PF_UNIX。
type指定服务类型。主要有SOCK_STREAM服务流服务TCP和SOCK_UGRAM数据报服务UDP并且高版本Linux,支持SOCK_NONBLOCK和SOCK_CLOEXEC。分别表示将新创建的socket设为非阻塞以及用fork调用创建子进程时在子进程内部关闭该socket。
protocol几乎所有情况都将其设置为0表示使用默认协议。
返回值 socket系统调用成功返回一个socket文件描述符失败返回-1并设置errno。
命名socket绑定 创建socket时只给它指定了地址族但并未指定使用该地址族中的哪个具体socket地址。 将一个socket与socket地址绑定成为给socket命名因为只有命名后客户端才知道该如何连接它。客户端通常不需要命名socket都是匿名方式即操作系统自动分配socket地址。
命名socket的系统调用 #include sys/types.h /* See NOTES */#include sys/socket.hint bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);参数
sockfd就是socket创建的文件描述符
addrbind将addr所指的socket地址分配给未命名的sockfd文件描述符
addrlen指socket地址长度
返回值 成功返回0失败返回-1并设置errno。常见的两种错误EACCES和EADDRINUSE EACCES:被绑定的地址是保护地址仅由超级用户可以访问。比如端口号0~1023. EADDRINUSE:被绑定的地址正在使用。比如将socket绑定到一个处于TIME_WAIT状态的socket地址。
监听socket socket被命名之后还不能马上接收客户连接我们需要如下系统调用来创建一个监听队列以存放待处理的客户连接。 #include sys/types.h /* See NOTES */#include sys/socket.hint listen(int sockfd, int backlog);参数
sockfd指定被监听的socket。
backlog提示内核监听队列的最大长度监听队列如果超过backlog服务器将不受理新的客户连接客户端也将收到ECONNREFUSED错误信息。在内核版本2.2之后只表示处于完全连接状态的socket的上限半连接状态则由内核参数定义。典型值为5.
返回值 成功返回0失败返回-1并设置errno。
接受socket #include sys/types.h /* See NOTES */#include sys/socket.hint accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);从listen监听队列中接受一个连接。
参数
sockfd执行过listen系统调用的监听队列socket。 addr用来获取被接受连接的远端socket地址如客户端连接服务端接受就可以通过这个参数获取。
addrlen指定socket地址长度。
返回值 成功返回一个新的socket连接该socket唯一标识了被接受的这个连接服务端可通过读写socket来与被接受连接的客户端进行通信。失败返回-1并设置errno。
发起socket #include sys/types.h /* See NOTES */#include sys/socket.hint connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);客户端主动与服务器建立连接。
参数
sockfd参数socket创建的文件描述符。
addr是服务器监听的socket地址
addrlen指定地址长度
返回值 成功返回0一旦成功建立连接socket就唯一地标识了这个连接客户端就可以通过sockfd来与服务端通信。失败返回-1并设置errno。常见的两个错误ECONNREFUSED和ETIMEDOUT。 ECONNREFUSED目标端口不存在连接被拒绝。 ETIMEDOUT连接超时。
关闭socket #include unistd.hint close(int fd);参数fd是待关闭状态close系统调用并非总是立即关闭一个连接而是通过fd引用计数减一当fd引用计数减为0才真正关闭连接。多进程一次fork()将父进程中代开的socket的引用计数加1因此我们必须在父子进程中都进行关闭才能真正关闭。