
unix网络通信-套接字
Chen_Hulk
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
UNIX网络编程套接字 -- 服务器终止分类讨论
本文讨论在网络套接字编程中,服务器终止的几种情况。1.服务器进程终止服务器和客户端建立连接之后,找到服务器子进程的ID,kill杀死之后,作为进程终止处理的部分工作,子进程中所有打开的描述符都被关闭。从而导致向客户发送一个FIN,而客户TCP则响应一个ACK。以上是TCP连接终止工作的前半部分。当客户端受到FIN则表示服务器进程已经关闭了,从而服务器不会再发送任何数据。1.1 ...原创 2019-12-01 22:01:16 · 351 阅读 · 0 评论 -
recvmsg & sendmsg
我们可以把read,readv, recv, recvfrom 调用替换为recvmsg,各类输出函数调用也可以替换为sendmsg。函数原型:ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);ssize_t sendmsg(int sockfd, struct msghdr *msg, int flags);...原创 2019-12-18 21:58:15 · 404 阅读 · 0 评论 -
readv & writev
readv和writev特点在于允许单个系统调用读入到或者写出自一个或多个缓冲区。这些操作分别称为分散读和集中写。因为来自读操作的输入数据被分散到多个应用缓冲区中,而来自多个应用缓冲区的输出数据则被集中提供给单个写操作。ssize_t readv(int filedes, const struct iovec *iov, int iovcnt);ssize_t writev(int ...原创 2019-12-17 22:05:11 · 650 阅读 · 0 评论 -
recv & send
socket通信中,客户端服务器可以使用recv & send进行数据收发。#include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); //buff存放接收数据ssize_t send(int sockfd, const void *buff, si...原创 2019-12-17 21:11:44 · 146 阅读 · 0 评论 -
UDP 套接字 recvfrom & sendto
UDP编程中,服务器不接受来自客户端的连接,只管调用recvfrom函数,阻塞等待客户端的连接。UDP都是以数据报的形式进行发送和接收的: 它一定是整包到达接收方.而TCP是以数据流的形式进行发送和接收的: 发包是不会整包到达的,而是源源不断的到,那接收方就必须组包.客户服务流程结构如下:recvfrom和sendto函数函数定义:int send...原创 2019-12-16 20:45:31 · 1092 阅读 · 0 评论 -
wait & waitpid
当一个进程终止时,内核就向其父进程发送SIGCHLD信号。当调用wait或waitpid时会发生什么:若其所有子进程都还在运行,则阻塞。 若一个子进程已终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回。 若它没有任何子进程,则立即出错返回。wait函数原型:pid_t wait(int *status) ;进程一旦调用了wait,就立即阻塞自己,由...原创 2019-12-12 21:10:59 · 267 阅读 · 0 评论 -
posix 信号处理
信号signal就是告知某个进程发送了某个事件的通知,有时也成为软中断。信号是异步发生的,即不知道其发生的准确时间。信号可以:由进程发送给进程(或自身)。 由内核发送给某个进程。建立信号处置的POSIX方法就是调用sigaction函数:typedef void Sigfunc(int);Sigfunc * signal(int signo, Sigfunc ...原创 2019-12-12 20:20:09 · 232 阅读 · 0 评论 -
getservbyname & getservbyport
1.getservbyname服务(指HTTP/SSH/TELNET这类协议)也是依赖于名字来认知,将名字和端口号的映射关系保存在一个文件中,那么即使端口号发生变化,我们也能找到相应的映射关系。getservbyname函数根据给定的名字查找相应的服务。其关系保存在:toney@sw2:/etc$ cat services # Network services, Inte...原创 2019-12-11 21:49:57 · 732 阅读 · 0 评论 -
gethostbyname & gethostbyaddr
1.gethostbyname使用gethostbyname获取主机信息,返回一个指向hostent结构的指针,其中包含有所查找主机的 所有 ipv4地址。其局限性在于只能返回ipv4的地址。函数定义:函数使用:#include<stdio.h>#include<netdb.h>#include<unistd.h>#...原创 2019-12-11 21:39:47 · 583 阅读 · 0 评论 -
getaddrinfo & getnameinfo
IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。IPv6中引入了getaddrinfo()的新API,它是协议无关的,既可用于IPv4也可用于IPv6。getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个addrinfo的结构(列...原创 2019-12-11 21:35:29 · 1343 阅读 · 0 评论 -
getsockname 和 getpeername
getsockname函数用于获取与某个套接字关联的本地协议地址 (ip 和 port)getpeername函数用于获取与某个套接字关联的外地协议地址 (ip 和 port)定义如下:#include<sys/socket.h>int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addr...原创 2019-12-10 21:25:36 · 705 阅读 · 0 评论 -
fork并发服务器
并发服务器需要使用fork进行实现,其是unix中派生新进程的唯一方法。fork函数定义#include <unistd.h>pid_t fork(void);调用fork一次,返回两次:在调用进程(父进程)中返回一次,返回值为子进程ID;(父进程有多个子进程,通过返回来获取跟踪。) 在子进程中又返回一次,返回值为0;(子进程可以通过getppid获取父进程...原创 2019-12-10 20:26:26 · 248 阅读 · 0 评论 -
ISS HTTP socket 编程学习
以下根据ISS code HTTP 总结socket编程,点击可以放大。原创 2019-12-09 21:26:47 · 341 阅读 · 0 评论 -
ISS TFTP socket 编程学习
以下根据 ISS code TFTP 模块中总结出SOCKET编程,点击图片可以清晰放大。原创 2019-12-09 21:19:41 · 219 阅读 · 0 评论 -
inet_pton , inet_ntop
inet_pton, inet_ntop是一个IP地址转换函数,可以在将IP地址在“点分十进制”和“二进制整数”之间转换。inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。函数定义:#include<arpa/inet.h>int inet_pton(int family, const char *strptr, void *addrpt...原创 2019-12-08 21:36:18 · 226 阅读 · 0 评论 -
inet_aton , inet_addr , inet_ntoa
首先了解下结构体struct in_addr:struct in_addr{ in_addr_t s_addr; //in_addr_t 表示 unsigned int}1.把ip地址转化为用于网络传输的二进制数值int inet_aton(const char *cp, struct in_addr *inp);inet_aton() 转换网络主机地址ip...原创 2019-12-08 21:14:12 · 548 阅读 · 0 评论 -
UNIX网络编程套接字 -- poll
poll 函数和 select 函数功能类似,但是poll没有最大描述符个数限制。1.函数定义:int poll(struct pollfd *fds, nfds_t nfds, int timeout);参数:fds: 指向一个结构体数组的第0个元素的指针,每个数组元素都是一个struct pollfd结构。struct pollfd{ int fd; ...原创 2019-12-04 21:43:25 · 221 阅读 · 0 评论 -
UNIX网络编程套接字 -- select
select函数允许进程指示内核等待多个事件中的任何一个发生,并且在有一个或多个事件发生或经历一段指定时间后才唤醒。1.函数原型:int select (int maxfd + 1,fd_set *readset,fd_set *writeset, fd_set *exceptset,const struct timeval * timeout);参数:maxfd + 1: ...原创 2019-12-03 20:34:45 · 257 阅读 · 0 评论