2016年8月10日

第7章套接字选项

摘要: 一般通过以下函数设置套接字选项:getsockopt和setsockopt函数;fcntl函数;ioctl函数 #include /* See NOTES */ #include int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); ... 阅读全文

posted @ 2016-08-10 00:58 笨拙的菜鸟 阅读(261) 评论(0) 推荐(0) 编辑

select与stdio混合使用的不良后果

摘要: 参考以下链接自己补充实验:http://www.cppblog.com/mysileng/archive/2013/01/15/197284.aspx?opt=admin int main(int argc,char *argv[]){ fd_set rfd; char buf[3]={0}; FD_ZERO(&rfd); while(1){ FD_SET(fileno(stdin),&rfd);... 阅读全文

posted @ 2016-08-10 00:58 笨拙的菜鸟 阅读(491) 评论(0) 推荐(0) 编辑

第6章 I/O多路复用

摘要: 前一章节客户端同时处理两个输入:标准输入和TCP套接字,然而问题在于客户端阻塞于fgets调用期,服务器进程被杀死后,服务器tcp虽然可以正确发送一个fin,但进程正阻塞于标准输入,它无法看到eof,直到从套接字读为止.这样的进程需要一种预先告诉内核的能力,一旦内核发现进程指定的一个或者多个I/O就绪,它就通知进程,这就叫做I/O复用select函数#include #include int se... 阅读全文

posted @ 2016-08-10 00:57 笨拙的菜鸟 阅读(344) 评论(0) 推荐(0) 编辑

第5章-unix网络编程 TCP/服务端程序示例

摘要: 这一章主要是完成一个完整的tcp客户/服务器程序.通过一很简单的例子.弄清客户和服务器如何启动,如何终止,发生了某些错误会发生什么.这些事很重要的 客户端代码#include "unp.h"//static void str_cli1(FILE*fp,int sockfd);int main(int argc,char *argv[]){ int sockfd; struct soc... 阅读全文

posted @ 2016-08-10 00:57 笨拙的菜鸟 阅读(768) 评论(0) 推荐(0) 编辑

unix网络编程第四章----基于TCP套接字编程

摘要: 为了执行网络I/O操作.进程必须做的第一件事情就是调用Socket函数.指定期待的通信协议#includeint socket(int family,int type,int protocol);family表示协议族,比如AF_INET,type表示套接字类型, protocol一般设置为0family: AF_INET ipv4协议type: SOCK_STREAM 字节流套接字 SOCK_D... 阅读全文

posted @ 2016-08-10 00:56 笨拙的菜鸟 阅读(279) 评论(0) 推荐(0) 编辑

第三章-套接字编程

摘要: 套接字结构一般从内核到进程.从进程到内核,其中从内核到进程是值-结果参数的例子地址转换函数推荐使用inet_ntop,inet_pton适用于ipv4跟ipv6套接字地址结构struct sockaddr_in{ uint8_t sin_len;//长度 posix规范不需要这个sa_family_t sin_family; //协议族,无符号短整数.一般表示AF_INETin_port_t s... 阅读全文

posted @ 2016-08-10 00:56 笨拙的菜鸟 阅读(466) 评论(0) 推荐(0) 编辑

unix网络编程第2章

摘要: time_wait状态 可靠地实现tcp全双工连接的终止;(假设客户端先关闭).服务端再关闭,服务端将发送fin ,客户端此时进入time_wait状态.客户端接收到fin.将回一个ack.如果这个ack一旦丢失..time_wait这段时间,会使得服务端重新发送fin(2)使得老的重复分节在网络中消失,五元组相同这个规则存在一个例外:如果到达的SYN的序列号大于前一化身的结束序列号,源自Berk... 阅读全文

posted @ 2016-08-10 00:55 笨拙的菜鸟 阅读(256) 评论(0) 推荐(0) 编辑

unix网络编程第一章demo

摘要: 之前一直以为time_wait状态就是主动关闭的那一方产生.然后这个端口一直不可以用.实际我发现服务端监听一个端口.客户端发来连接后.传输数据后.服务端关闭客户端套接字后.用netstat -nat | grep 端口 查看了产生了time_wait.但客户端依然可以不断连接服务端.然后服务端不断关闭.并不会影响监听端口.原来是只有服务端把监听端口描述符给关闭(不是accept那个连接.虽然,端口... 阅读全文

posted @ 2016-08-10 00:55 笨拙的菜鸟 阅读(543) 评论(0) 推荐(0) 编辑

论epoll的实现

摘要: 论epoll的实现上一篇博客 论select的实现 里面已经说了为什么 select 比较慢。poll 的实现和 select 类似,只是少了最大 fd 限制,如果有兴趣可以自己去看代码。我这里来简单来过一下 epoll 的实现。1) 一次添加select / poll 为了实现简单,不对已有的 fd 进行管理。每次需要传入最大的轮询 fd, 然后每个监听 fd 挂到设备一次导致性能不佳。epol... 阅读全文

posted @ 2016-08-10 00:54 笨拙的菜鸟 阅读(503) 评论(0) 推荐(0) 编辑

Select函数实现

摘要: int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict errorfds, struct timeval *restrict timeout);SYSCALL_DEFINE5(select, int, n, ... 阅读全文

posted @ 2016-08-10 00:52 笨拙的菜鸟 阅读(1242) 评论(0) 推荐(0) 编辑

导航