gljin_cn IP属地:上海

文章 关注 粉丝 访问 贡献
 
共 135 篇文章
显示摘要每页显示  条
关于网络编程中MTU、TCP、UDP优化配置的一些总结。其中以太网(Ethernet)的数据帧在链路层   IP包在网络层   TCP或UDP包在传输层   TCP或UDP中的数据(Data)在应用层   它们的关系是 数据帧{IP包{TCP或UDP包{Data}}}   ---------------------------------------------------------------------------------在应用程序中我们用...
在多进程并发服务器中,父子进程共享着套接字,套接字描述符引用计数记录着共享着的进程个数,当父进程或某一子进程close掉套接字时,描述符引用计数会相应的减一,当引用计数仍大于零时,这个close调用就不会引发TCP的四路握手断连过程。客户端有两个进程,父进程和子进程,子进程是在父进程和服务器建连之后fork出来的,子进程发送标准输入终...
Selector selector = Selector.open();int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)epoll_ctl可以操作epoll_create创建的epoll,如将socket句柄加入到epoll中让其监控,或把epoll正在监控的某个socket句柄移出epoll。int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout)epoll_wait在调...
Reactor单线程模型。2、多线程模型:为了解决单线程模型存在的一些问题,演化而来的Reactor线程模型。Reactor多线程模型。网络IO的读写操作由一个NIO线程池负责,线程池可以采用标准的JDK线程池实现,包含一个任务队列和N个可用的线程,由这些NIO线程负责消息的读取、解码、编码和发送;在这类场景下,单独一个Acceptor线程可能会存在性能不足...
浅谈 TCP/IP 网络编程中 socket 的行为。Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为。关于TCP/IP协议,建议参考Richard Stevens的《TCP/IP Illustrated,vol1》(TCP/IP详解卷1)。如果a进程先write然后阻塞在read,由于收不到B机器TCP/IP栈的ack,TCP会持续重传12次(时间跨度大约为9分钟),然后在阻塞...
1.4,客户端调用close()+SO_LINGER选项。1.1与1.2等价,就算客户端进程关闭,系统内核也会自动close(socket),且注意,当socket引用为0时才会真正调用close(),close()总是立即返回的,然后由系统尝试发送完内核缓冲区内的所有数据,接着才发送FIN。主动关闭的一方先发送FIN,收到ACK后,进入FIN_WAIT2状态,此时也叫做“半关闭”状态,特别须...
子进程的关闭处理应该是这样的:shutdown(sockfd, SHUT_RDWR);close(sockfd);这样处理,服务器的FIN会被发出,socket进入LAST_ACK状态,等待最后的ACK到来,就能进入初始状态CLOSED。SHUT_RDWR:相当于调用shutdown两次:首先是以SHUT_RD,然后以SHUT_WR注意:在多进程中如果一个进程中shutdown(sfd, SHUT_RDWR)后其它的进程将无法进行通信. 如果...
后台进程中printf导致的errno=5的错误(摘)原来的代码是这样的(send调用的情况类似):s32 len = recv( m_socket, data, len, 0 );// printf("recv = %d\n", len);if( len==-1 && (errno==EAGAIN || errno==EWOULDBLOCK) ){而socket在调用recv返回EAGAIN错误后,因为又调用了printf导致errno被修改了,导致后面的判断条件...
linux下使用write\send发送数据报 EAGAIN : Resource temporarily unavailable 错。close(tcp_client_sock);setsockopt(tcp_client_sock,SOL_SOCKET,SO_SNDBUF,&opt,sizeof(int));假如发送端流量大于接收端的流量(意思是epoll所在的程序读比转发的socket要快),由于是非阻塞的socket,那么send()函数虽然返回,但实际缓冲区的数据并未真正发给...
fd_set集合可以通过一些宏由人为来操作,比如清空集合FD_ZERO(fd_set *),将一个给定的文件描述符加入集合之中FD_SET(int ,fd_set *),将一个给定的文件描述符从集合中删除FD_CLR(int ,fd_set*),检查集合中指定的文件描述符是否可以读写FD_ISSET(int ,fd_set* )。struct fd_set fds;FD_SET(fp,&fds);FD_SET(int fd, fd_set *fdset):建立...
帮助 | 留言交流 | 联系我们 | 服务条款 | 下载网文摘手 | 下载手机客户端
北京六智信息技术股份有限公司 Copyright© 2005-2024 360doc.com , All Rights Reserved
京ICP证090625号 京ICP备05038915号 京网文[2016]6433-853号 京公网安备11010502030377号
返回
顶部