UNIX网络编程
文章平均质量分 73
sturdygrass
这个作者很懒,什么都没留下…
展开
-
字节操纵函数
操作多字节字段的函数有两组,它们既不对数据作解释,也不假设数据是以空字符结束的C字符串。当处理套接字地址结构时,我们需要这些类型的函数,因为我们需要操纵诸如IP地址这样的字段,这些字段可能包含值为0的字节,却不是C字符串。名字以b(表示字节)开头的第一组函数起源于4.2BSD,几乎所有现今支持套接字函数的系统仍然提供它们。名字以mem(表示内存)开头的第二组函数起源于ANSI C标准,支持AN原创 2013-05-22 14:18:48 · 684 阅读 · 0 评论 -
I/0模型
UNIX下有5种可用的I/0模型: •阻塞式I/0; •非阻塞式I/0; •I/0复用(select和poll); •信号驱动式I/0(SIGIO); •异步I/0(POSIX的aio_系列函数)。 一个输入操作通常包括两个不同的阶段: (1)等待数据准备好; (2)从内核向进程复制数据。原创 2013-05-30 10:16:05 · 642 阅读 · 0 评论 -
close和shutdown函数
1 close函数 通常的Unix close函数也用来关闭套接字,并终止TCP连接。 #include int close(int sockfd); close将描述符引用计数减1。当该计数减到0时,对TCP套接字而言默认行为是把该套接字标记成已关闭,然后立即返回到调用进程。已关闭套接字不能再由调用进程使用,也就是说它不能再作为read或wr原创 2013-05-30 11:57:21 · 574 阅读 · 0 评论 -
accept函数
accept函数由TCP服务器调用,用于从已完成连接队列队头返回下一个已完成连接。如果已完成连接队列为空,那么进程被投入睡眠(假定套接字为默认的阻塞方法)。#include int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen);返回值:若成功则返回非负描述符,否则返回-1参数cliaddr和addr原创 2013-05-26 09:12:05 · 1156 阅读 · 0 评论 -
listen函数
listen函数仅由TCP服务器调用,它做两件事情:(1) 当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字。listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应接受指向该套接字的连接请求。根据TCP状态转换图,调用listen导致套接字从CLOSED状态转换到LISTEN状态。(2) 本函数的第二原创 2013-05-26 09:09:54 · 1207 阅读 · 0 评论 -
bind函数
bind函数把一个本地协议地址赋予一个套接字。对于网际网协议,协议地址是32位的IPv4地址或128位的IPv6地址与16位的TCP或UDP端口号的组合。#include int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);返回值:若成功则返回0,否则返回-1第二个参数是一个指向特定于协议的地原创 2013-05-26 08:45:59 · 1127 阅读 · 0 评论 -
connect函数
TCP客户用connect函数来建立与TCP服务器的连接。#include int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);返回值:若成功则返回0,否则返回-1sockfd是由socket函数返回的套接字描述符,第二个、第三个参数分别是一个指向套接字地址结构的指针和该结构的大小。原创 2013-05-26 08:44:45 · 724 阅读 · 0 评论 -
socket函数
为了执行网络I/0,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型(使用IPv4的TCP、使用IPv6的UDP、Unix域字节流协议等)。#include int socket(int family, int type, int protocol);返回值:若成功则返回非负描述符,否则返回-1其中family参数指明协议族,它是图1中所示的某个常值。该参数原创 2013-05-26 08:33:20 · 614 阅读 · 0 评论 -
套接字地址结构
大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义了它自己的套接字地址结构。这些结构的名字均以sockaddr_开头,并以对应每个协议族的唯一后缀结尾。1、IPv4套接字地址结构IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在头文件中。图1给出了它的POSIX定义: struct in_addr { in_a原创 2013-05-21 21:24:54 · 1186 阅读 · 0 评论 -
地址转换函数
有两组地址转换函数,它们在ASCII字符串与网络字节序的二进制值(这是存放在套接字地址结构中的值)之间转换网际地址。1、inet_aton、inet_addr和inet_ntoa函数这三个函数在点分十进制数串(例如“206.168.112.96”)与它长度为32位的网络字节序二进制值间转换IPv4地址。#include int inet_aton(const char *strpt原创 2013-05-26 08:05:32 · 1054 阅读 · 0 评论 -
字节排序函数
考虑一个16位整数,它由两个字节组成。内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;另一种是将高序字节存储在起始地址,这称为大端(big-endian)字节序。图1展示了这两种格式。 图1 16位整数的小端字节序和大端字节序 在该图中,我们在顶部标明内存地址增长的方向为从右到左,在底部标明内存地原创 2013-05-22 13:39:37 · 737 阅读 · 0 评论 -
select函数
该函数允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它。 作为一个例子,我们可以调用select,告知内核仅在下列情况发生时才返回: •集合{1、4、5}中的任何描述符准备好读; •集合{2、7}中的任何描述符准备好写; •集合{1、4}中的任何描述符有异常条件待处理; •已经历了10原创 2013-05-31 17:16:11 · 644 阅读 · 0 评论