
Unix Network Programming
文章平均质量分 56
liyuan_35023
这个作者很懒,什么都没留下…
展开
-
Unix Network Programming(2)---错误处理:包裹函数
程序一般都需要检查每个函数调用是否返回错误。个别情况下,当函数返回错误时,我们想做的事并非简单的终止程序的运行,还可能需要检查系统调用是否被中断。 但当程序出错时终止程序运行是普遍情况,我们可以通过定义包裹函数来缩短程序。包裹函数的作用就是,完成实际的函数调用,并检查返回值,并在发生错误时终止进程。约定包裹函数名为实际函数名首字母大写形式。intSocket(int family,int原创 2015-10-17 10:59:54 · 474 阅读 · 0 评论 -
Unix Network Programming(13)---accept 函数
accept函数由TCP服务器调用,用于从已完成连接队列队头返回下一个已完成连接。如果已完成连接队列为空,那么进程被投入睡眠(假定套接字为默认的阻塞方式)。#include <sys/socket.h>int accept (int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); /*返回:若成功则为非负描述符,若出错则为1*/原创 2015-12-08 16:06:00 · 663 阅读 · 0 评论 -
Unix Network Programming(14)---fork 和 exec 函数
fork 函数是Unix中派生新进程的唯一方法。#include <unistd.h>pid_t fork(void); /*返回:在子进程中为0,在父进程中为子进程ID,若出错则为-1*/fork函数调用一次,返回两次。调用进程(父进程)返回值是新派生进程(子进程)的进程ID号;在子进程中又返回一次,返回值为0.key point:fork在子进程返回0而不是父进程的进程ID的原因在于:任原创 2015-12-08 16:37:07 · 494 阅读 · 0 评论 -
Unix Network Programming(12)---listen 函数
listen 函数仅由TCP服务器调用,它做两件事情。当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字。listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应接收指向该套接字的连接请求。根据TCP状态转换图,服务器将由CLOSED状态转换到LISTEN状态。本函数第二个参数规定了内核应该为相应的套接字排队的最大连原创 2015-12-07 15:58:41 · 421 阅读 · 0 评论 -
Unix Network Programming(11)---bind 函数
bind函数把一个本地协议地址赋予一个套接字。对于网际网协议,协议地址是32位的IPv4地址或128位的IPv6地址与16位的TCP或UDP端口号的组合。#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen); /*若成功则为0,若出错则为1*/第二个参数是一个指原创 2015-12-07 11:35:47 · 412 阅读 · 0 评论 -
Unix Network Programming(9)---Socket函数
为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定通信协议类型(使用IPv4的TCP,使用IPv6的UDP,Unix域字节流协议)。#include <sys/socket.h>int socket(int family,int type, int protocol); /*返回:若成功则为非负描述符,若出错则为-1*/f原创 2015-12-04 15:41:11 · 493 阅读 · 0 评论 -
Unix Network Programming(10)---connect 函数
TCP客户用connect函数来建立与TCP服务器的连接。#include <sys/socket.h>int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen); /*返回:若成功则为0,若出错则为-1*/函数解析:sockfd是由socket函数返回的套接字描述符,第二个和第三个参数分别为一个指向原创 2015-12-05 10:33:52 · 415 阅读 · 0 评论 -
Unix Network Programming(8)---Some Important Functions
字节排序函数小端字节序(LE):将低序字节存储在起始地址。大端字节序(BE):将高序字节存储在起始地址。(最直观的字节序)主机字节序我们把某个给定系统所用的字节序称为主机字节序(host byte order)。 ubuntu 32位14.04LTS为little-endian网络字节序网络协议必须指定一个网络字节序(network byte order)。发送协议栈与接收协议栈必须就这些多原创 2015-12-03 15:16:06 · 283 阅读 · 0 评论 -
Unix Network Programming(6)---套接字地址结构
大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义它自己的套接字地址结构。均以sockaddr_开头,并以对应每个协议族的唯一后缀结尾。IPv4套接字地址结构网际套接字地址结构:struct in_addr{ in_addr_t s_addr;}struct sockaddr_in{ uint8_t sin_len; sa_family_t原创 2015-12-02 10:23:39 · 425 阅读 · 0 评论 -
Unix Network Programming(7)---值-结果参数
从进程到内核 从进程到内核传递套接字地址结构的函数有3个:bind,connect和sendto。这些函数的一个参数是指向某个套接字地址结构的指针,另一个参数是该结构的整数大小。 既然指针和指针所指内容的大小都传递给了内核,于是内核知道到底需要从进程复制多少数据进来。从内核到进程 从内核到进程传递套接字结构的函数有4个:accept,recvfrom,getsockname和g原创 2015-12-02 10:57:10 · 466 阅读 · 0 评论 -
Unix Network Programming(1)---基本概念说法
一个简单的时间获取函数#include 'unp' //包含自己编写的头文件,该头文件包含大多数网络程序都需要的许多系统头文件, 并定义了所用到的各种常值int main(int argc, char **argv) //main函数形参是命令行参数{ int sockfd,n; char recvline[MAXLINE+1];原创 2015-10-16 21:06:46 · 995 阅读 · 0 评论 -
Unix Network Programming(17)---getsockname 和 getpeername函数
这两个函数或者返回与某个套接字关联的本地协议地址(getsockname),或者返回与某个套接字关联的外地协议地址(getpeername)。#include <sys/socket.h>int getsockname(int sockfd,struct sockaddr *localaddr, socklen_t *addrlen);int getpeername(int sockfd,s原创 2015-12-09 16:08:43 · 439 阅读 · 0 评论 -
Unix Network Programming(16)---close 函数
通常Unix close函数也用来关闭套接字,并终止TCP连接。#include <unistd.h>int close(int sockfd); /*返回:若成功则为0,若出错则为-1*/默认行为:close函数把TCP套接字标记成已关闭,然后立即返回到调用进程,该套接字描述符不能再由调用进程使用,也就是说它不能再作为read或write的第一个参数。然而TCP将尝试发送已排队等待发送到对原创 2015-12-09 15:28:39 · 377 阅读 · 0 评论 -
Unix Network Programming(5)---SCTP
SCTP—流控制传输协议(Stream Control Transmission Protocol).原创 2015-10-22 15:47:23 · 490 阅读 · 0 评论 -
Unix Network Programming(4)---TCP
TCP—传输控制协议(Transmission Control Protocol),是一种面向连接的,向用户进程提供可靠的全双工字节流的协议。TCP套接字是一种流套接字(stream socket)。TCP关心确认、超时和重传之类的细节。大多数网络应用都使用TCP。TCP既可以使用IPv4,也可以使用IPv6。TCP概要面向连接:TCP客户先于某个给定服务器建立一个连接,再跨越该连接与那个服务器原创 2015-10-22 14:41:32 · 538 阅读 · 0 评论 -
Unix Network Programming(3)---UDP
UDP—用户数据报协议(User Datagram Protocol)是一个不可靠,无连接协议。UDP套接字是一种数据报套接字(datagram socket)。UDP既可使用IPv4,也可使用IPv6。UDP概要UDP是一个简单的传输层协议。应用进程往一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报,再被封装到一个IP数据报,然后发送到目的地。不可靠:UDP不能保证UDP数据报原创 2015-10-21 10:57:38 · 624 阅读 · 0 评论 -
Unix Network Programming(15)---并发服务器
Unix中编写并发服务器程序最简单的方法就是fork一个子进程来服务每个客户。pid_t pid;int listenfd, connfd;listenfd=Socket(...); //fill in sockaddr_in{} with server well-known portBind(listenfd,...);Listen(listenfd,LISTENQ);for(;原创 2015-12-09 10:28:43 · 594 阅读 · 0 评论