随笔分类 - 网络编程
摘要:创建线程和结束线程 pthread_create #include <pthread.h> /* Create a new thread, starting with execution of START-ROUTINE getting passed ARG. Creation attributed
阅读全文
摘要: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,
阅读全文
摘要:网络程序需要处理的第三类事件是定时事件,比如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此,我们要将每个定时事件分别封装成定时器,并使用某种容器类数据结构,比如
阅读全文
摘要:信号是由用户、系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。Linux 信号可由如下条件产生: 对于前台进程,用户可以通过输人特殊的终端字符来给它发送信号。比如输入Ctrl+C通常会给进程发送一个中断信号。 系统异常。比如浮点异常和非法内存段访问。 系统状态变化。比如al
阅读全文
摘要:select select系统调用的用途是:在一段指定时间内,监听用户感兴趣的文件描述符上的可读、可写和异常等事件。 #include<sys/select.h> /* Check the first NFDS descriptors each in READFDS (if not NULL) fo
阅读全文
摘要:服务器模型@C/S模型 C/S模型的逻辑很简单。服务器启动后,首先创建一个(或多个)监听socket,并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户连接。服务器稳定运行之后,客户端就可以调用connect函数向服务器发起连接了。由于客户连接请求是随机到达的异步事件
阅读全文
摘要:pipe函数 pipe函数可用于创建一个管道,以实现进程间通信。 #include<unistd.h> /* Create a one-way communication channel (pipe). If successful, two file descriptors are stored i
阅读全文
摘要:为何需要半关闭 考虑以下情况: 一旦客户端连接到服务器,服务器将约定的文件传输给客户端,客户端收到后发送字符串「Thank you」给服务器端。 此处「Thank you」的传递是多余的,这只是用来模拟客户端断开连接前还有数据要传输的情况。此时程序实现的难度并不小,因为传输文件的服务器端只需连续传输
阅读全文
摘要:基于UDP的数据I/O函数 //成功时返回传入的字节数,失败时返回-1 ssize_t sendto (int __fd, const void *__buf, size_t __n, int __flags, __CONST_SOCKADDR_ARG __addr, socklen_t __add
阅读全文
摘要:IPv4地址的结构体 /* Fixed-size types, underlying types depend on word size and compiler. */ typedef signed char __int8_t; typedef unsigned char __uint8_t; t
阅读全文
摘要:服务端套接字创建过程 第一步:调用socket函数创建套接字 //成功时返回文件表述符,失败时返回-1 int socket(int __domain, int __type, int __protocol) domain:套接字使用的协议族(Protocol Family)信息; type:套接字
阅读全文