摘要:
当服务一个客户请求可能花费较长时间时,我们并不希望整个服务器被单个客户长期占用,而是希望同时服务多个客户 unix中编写并发服务器程序最简单的方法就是fork一个子进程来服务每个客户 典型的并发服务器程序轮廓 当一个连接i建立时,accpt返回,服务器接着调用fork,然后由子进程服务客户,父进程则 阅读全文
摘要:
fork函数调用一次,返回2次 它在调用进程中返回一次,返回值是新派生进程的进程ID号 在子进程又返回一次,返回值是0 因此,返回值本身告诉当前进程的子进程还是父进程 fork在子进程返回0而在父进程返回进程ID的原因在于: 任何子进程只有一个父进程,而子进程总是可以通过调用getppid取得父进程 阅读全文
摘要:
accept函数由TCP服务器调用,用于从以完成连接队列队头返回下一个以完成连接 如果以完成队列为空,那么进程被投入睡眠(假定套接字为默认的阻塞方式) int acceptn ( int sockfd, struct sockaddr * cliaddr,socklen_t * addrlen); 阅读全文
摘要:
listen函数仅仅由TCP服务器调用,它做2件事: 1)当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字 listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应接受指向该套接字的连接请求 调用listen导致套接 阅读全文
摘要:
bind函数把一个本地协议地址赋予一个套接字 对于网际协议,协议地址是32位的IPv4地址或128位的IPv6与16位的TCP或UDP端口号的组合 int bind ( int sockfd, const struct sockaddr * myaddr ,socklen_t addrlen); b 阅读全文
摘要:
注意: connect函数导致当前套接字从CLOSE状态(该套接字自从由socket函数创建以来一直所处的状态)转移到SYN_SENT状态 若成功则再转移到ESTABLISHED状态, 若connect失败则该套接字不再可用,必须关闭,我们不能对这样的套接字再次调用connect函数 当循环调用函数 阅读全文
摘要:
TCP客户用connect函数来建立与TCP服务器的连接 int connect (int sockfd, const sockaddr * servaddr, socklen_t addrlen); sockfd是由socket函数返回的套接字描述符 servaddr指向套接字地址结构的指针 ad 阅读全文
摘要:
为了执行网络IO,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型 int socket(int family,int type,int protocol); 其中,family参数指定协议簇,type参数指明套接字类型,protocol参数一般为0 TCP是一个字节流协议, 阅读全文