网络编程
文章平均质量分 86
吃米饭
这个作者很懒,什么都没留下…
展开
-
HTTP报文结构
HTTP协议原创 2022-06-14 23:31:45 · 172 阅读 · 0 评论 -
Linux多线程编程
创建线程和结束线程pthread_create#include <pthread.h>/* Create a new thread, starting with execution of START-ROUTINE getting passed ARG. Creation attributed come from ATTR. The new handle is stored in *NEWTHREAD. */extern int pthread_create (pth原创 2022-02-03 22:47:08 · 2163 阅读 · 0 评论 -
Linux多进程编程
fork系统调用#include <sys/types.h>#include <unistd.h>/* Clone the calling process, creating an exact copy. Return -1 for errors, 0 to the new process, and the process ID of the new process to the old process. */extern __pid_t fork (void原创 2022-02-03 18:06:21 · 2783 阅读 · 0 评论 -
Linux服务器定时器
网络程序需要处理的第三类事件是定时事件,比如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此,我们要将每个定时事件分别封装成定时器,并使用某种容器类数据结构,比如链表、排序链表和时间轮,时间堆将所有定时器串联起来。不过,在讨论如何组织定时器之前,我们先要介绍定时的方法。定时是指在一段时间之后触发某段代码的机制,我们可以在这段代码中依次处理所有到期的定时器。换言之,定时机原创 2022-02-02 20:58:49 · 1893 阅读 · 0 评论 -
高性能服务器编程-信号
信号是由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。Linux 信号可由如下条件产生:口对于前台进程,用户可以通过输人特殊的终端字符来给它发送信号。比如输入Ctrl+C通常会给进程发送一个中断信号。系统异常。比如浮点异常和非法内存段访问。系统状态变化。比如alarm定时器到期将引起SIGALRM信号。运行kill命令或调用kill 函数。服务器程序必须处理(或至少忽略)一些常见的信号,以免异常终止。发送信号Linux下,一个进程给其他进程发送信号的API原创 2022-01-15 20:40:33 · 469 阅读 · 0 评论 -
I/O复用
selectselect系统调用的用途是:在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常等事件。#include<sys/select.h>/* Check the first NFDS descriptors each in READFDS (if not NULL) for read readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS (if not NULL原创 2021-12-31 13:56:25 · 858 阅读 · 0 评论 -
高性能服务器程序框架
服务器模型@C/S模型C/S模型的逻辑很简单。服务器启动后,首先创建一个(或多个)监听socket,并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户连接。服务器稳定运行之后,客户端就可以调用connect函数向服务器发起连接了。由于客户连接请求是随机到达的异步事件,服务器需要使用某种I/O模型来监听这一事件。I/O模型有多种,图中,服务器使用的是1/O复用技术之一的select系统调用。当监听到连接请求后,服务器就调用accept函数接受它,并分配一个逻辑单元为新的连原创 2021-12-30 14:50:19 · 1516 阅读 · 0 评论 -
Linux服务器程序规范化
Linux日志体系rsyslogd守护进程既能接收用户进程输出的日志,又能接收内核日志。用户进程是通过调用syslog函数生成系统日志的。该函数将日志输出到一个UNIX本地域socket类型(AF_UNIX)的文件/dev/log中,rsyslogd 则监听该文件以获取用户进程的输出。内核日志在老的系统上是通过另外一个守护进程rklogd来管理的,rsyslogd 利用额外的模块实现了相同的功能。内核日志由printk等函数打印至内核的环状缓存(ring buffer) 中。环状缓存的内容直接映射到/p原创 2021-12-21 14:49:15 · 706 阅读 · 0 评论 -
Linux I/O函数
pipe函数pipe函数可用于创建一个管道,以实现进程间通信。#include<unistd.h>/* Create a one-way communication channel (pipe). If successful, two file descriptors are stored in PIPEDES; bytes written on PIPEDES[1] can be read from PIPEDES[0]. Returns 0 if successfu原创 2021-12-20 22:25:40 · 511 阅读 · 0 评论 -
Linux网络编程基础API
基于TCP的半关闭#include<sys/socket.h>/* Shut down all or part of the connection open on socket FD. HOW determines what to shut down: SHUT_RD = No more receptions; SHUT_WR = No more transmissions; SHUT_RDWR = No more receptions or tr原创 2021-12-15 11:06:21 · 2800 阅读 · 0 评论 -
基于UDP的服务器端/客户端
基于UDP的数据I/O函数//成功时返回传入的字节数,失败时返回-1ssize_t sendto (int __fd, const void *__buf, size_t __n, int __flags, __CONST_SOCKADDR_ARG __addr, socklen_t __addr_len);__fd:用于传输数据的UDP套接字文件描述符;__buf:保存待传输数据的缓冲地址值;__n:待传输的数据长度,以字节为单位;__flags:可原创 2021-08-09 20:01:14 · 247 阅读 · 0 评论 -
IPv4地址的结构体与网络字节序
表示IPv4地址的结构体/* Fixed-size types, underlying types depend on word size and compiler. */typedef signed char __int8_t;typedef unsigned char __uint8_t;typedef signed short int __int16_t;typedef unsigned short int __uint16_t;typedef signed int __int32_t;原创 2021-08-08 17:28:13 · 960 阅读 · 1 评论 -
实现基于TCP的服务端/客户端
服务端套接字创建过程第一步:调用socket函数创建套接字//成功时返回文件表述符,失败时返回-1int socket(int __domain, int __type, int __protocol)domain:套接字使用的协议族(Protocol Family)信息;type:套接字数据传输类型信息;protocol:计算机间通信中使用的协议信息;协议族(Protocol Family) Name Purpose原创 2021-08-05 10:13:06 · 343 阅读 · 0 评论