计算机网络
文章平均质量分 58
头真的好大哦
这个作者很懒,什么都没留下…
展开
-
Unix网络编程常见错误码
EINTR: 4 阻塞的操作被取消阻塞的调用打断。如设置了发送接收超时,就会遇到这种错误。 只能针对阻塞模式的socket,非阻塞模式不会出现这个错误。读,写阻塞的socket时(recv,send),-1返回,错误号为EINTR,说明在数据传输前接收到一个信号(A signal occurred before any data was transmitted.)。出现这种情况,操作应该继续。如果recv的返回值为0,那表明连接已经断开,接收操作应该结束。 对于s...转载 2021-04-01 20:24:07 · 1903 阅读 · 0 评论 -
UDP套接字编程
UDP套接字根据传输数据前有无调用connect函数进行连接,可分为 已连接UDP套接字 和 未连接UDP套接字。这里的已连接和未连接是针对一方而言,而不是双方客户端和服务器其中一方调用connect,都可以让自己这边的UDP套接字编程已连接UPD套接字。未连接UDP套接字和已连接UDP套接字存在以下异同:未连接UDP套接字:接收数据使用recvfrom函数,可以从from 参数获取发送方的ip地址和端口号;发送数据使用sendto,直接在to参数写上收数据一方的ip地址和端口号 接收原创 2021-04-01 20:14:38 · 301 阅读 · 0 评论 -
fcntl
int fcntl(int fd, int cmd, int arg)fcntl在网络编程领域提供了以下特性:其中fd为要设置的网络方的套接字,cmd指定操作,arg提供参数cmd的常用标志为:F_SETFL: 设置文件套接字状态F_GETFL:获取套接字状态F_SETOWN:设置套接字属主(套接字所属的进程或进程组),使用socket创建的套接字没有属组。如果一个新的套接字是从另一个监听套接字创建而来,那么套机字属主和监听套接字一致常用套接字状态为:O_NONBL...原创 2021-04-01 19:01:37 · 144 阅读 · 0 评论 -
套接字选项的获取和设置
套接字有很多的选项需要设置,同时也需要获取套接字的一些状态信息,一般用getsocketopt和setsocketopt执行这些操作getsockopt头文件 <sys/socket.h>int getsocketopt(int sockfd, int level, int optname, void *opval, socketlen_t *oplen);getsocket函数把获取的信息存到opval和oplen中socket:文件描述符level:协议层次...原创 2021-04-01 15:38:44 · 639 阅读 · 0 评论 -
read、write、recvfrom和sendto
read函数头文件 <unistd>ssize_t read(int fd, void *buf, size_t nbytes);read()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。返回值 >0, 表示接收到数据返回值=0, 表示接收FIN,返回值表示EOF返回值<0,表示接收到RST,错误码存储在errnowrite函数头文件 <unistd>ssize_t write (int fd,...原创 2021-03-31 20:24:13 · 233 阅读 · 0 评论 -
select和poll函数、shutdown函数
select函数头文件 <sys/select.h> <sys/time.h> int select(int maxfdp, fd_set* readfds, fd_set* writefds, fd_set* errorfds, struct timeval* timeout);该函数允许进程指示内核等待多个事件中的任何一个发送,并且只有在一个或多个事件发生或经历一段时间后才唤醒它timeval的定义如下:struct timeval { long ..原创 2021-03-31 20:00:42 · 198 阅读 · 0 评论 -
5种IO模型
Unix下的5种I/O模型: 1. 阻塞式I/O 2. 非阻塞式I/O 3. I/O复用(select/poll/epoll) 4. 信号驱动式(SIGIO) 5. 异步I/O(POSIX的aio_系列函数) 一个输入操作通常包括两个不同的阶段: (1)等待数据准备好 (2)从内核向进程复制数据 对于...转载 2021-03-29 23:47:19 · 170 阅读 · 0 评论 -
在客户和服务器之间传递二进制结构
https://blog.csdn.net/weixin_34087307/article/details/85610261转载 2021-03-29 19:00:04 · 98 阅读 · 0 评论 -
TCP连接终止情况
accept返回前终止连接场景描述:三次握手完成后,连接建立完成,然后Client TCP发送一个RST(reset)。在服务器方,连接被它的TCP放入等待连接队列,当RST到来时,连接正在等待服务器进程调用accept。一段时间后,服务器进程调用accept。发生这种情况后,POSIX规定accept函数返回ECONNABORTED服务器进程终止场景描述:杀死服务器子进程后,子进程上的描述符被关闭,因此会向客户端发送一个FIN。这时候客户端不知道服务器的进程已经关闭,接受到FIN的客户端原创 2021-03-29 18:56:52 · 474 阅读 · 0 评论 -
POSIX信号处理
POSIX信号处理信号(signal)就是告知某个进程发生了某个事件的通知,有时也称软件中断(software interrupt)。注意:信号是异步发生的,也就是说进程预先并不知道信号的准确发生时刻。查询僵死子进程的shell命令ps -A -ostat,ppid,pid | grep -e '^[Zz]'信号可以1. 由一个进程发送给另外一个进程(包括自身)2. 由内核发送给某个进程信号处理函数每个信号都有一个与之关联的处置。当有特定信号发生的时候,特定的函数被调用,那么这原创 2021-03-29 16:36:53 · 324 阅读 · 1 评论 -
基本套接字编程的几个关键函数
socket函数socke函数的功能在于生成一个指定类型的套接字描述符头文件 <sys/socket.h>int socket(int family, int type, int protocol);其中family指协议族,family可选值如下: AF_INET IPv4协议 AF_INET6 IPv6协议 AF_LOCAL Unix域协议 AF_ROUTE 路由套接字 AF_KEY 密钥.原创 2021-03-28 16:33:05 · 285 阅读 · 0 评论 -
Unix网络编程之套接字地址结构和地址转换函数
常用套接字地址结构有IPv4和IPv6两个版本,IPv4较为常见IPv4的地址结构定义如下:struct in_addr{ in_addr_t s_addr;/*32-bit IPv4 address*/ /*network byte ordered*/};struct sockaddr_in{ uint8_t sin_len;/*length if structure(16)*/ sa_family_t sin_family;/*AF_INET*/ in_port_t原创 2021-03-26 00:12:29 · 262 阅读 · 0 评论 -
一个简单的时间获取服务器程序
#include "unp.h"#include <time.h>intmain(int argc, char **argv){ int listenfd, connfd; struct sockaddr_in *servaddr; char buff[MAXLINE]; time_t ticks; listenfd = Soceket(AF_INET, SOCK_.原创 2021-03-24 15:16:08 · 170 阅读 · 0 评论 -
计算机网络传输单元的名称
计算机网络各层对等试题间交换的单位信息称为协议数据单元(protocol data unit,PDU)应用层实体间交换的PDU称为应用数据(application data)传输层传输的PDU称为消息,其中TCP的PDU称为分节(segment),UPD的PDU称为记录(record)SCTP的PDU称为块(chunk)网络层的PDU称为IP数据报(IP datagram)数据链路层的PDU称为帧,...原创 2021-03-24 14:48:33 · 1641 阅读 · 0 评论 -
一个简单的时间获取客户程序详解
#include "unp.h"//程序出错,错误原因存errnoint int main(int argc, char const *argv[]) //argc为argv的元素数量,argv[0]为程序的绝对路径,例如D:\code\test.exe, 剩下的元素为跟在程序命令行后面的字符串参数数量 { int sockfd,in; char recvline[MAXLINE + 1]; //MAXLINE来自头文件"unp.h" struct socka...原创 2021-03-24 14:33:28 · 146 阅读 · 0 评论