网络编程
文章平均质量分 59
track_down
这个作者很懒,什么都没留下…
展开
-
字符串ipv4和ipv6地址转换成整形
ip地址转换原创 2022-07-04 11:47:54 · 1285 阅读 · 1 评论 -
libcurl异步调用
int main(int argc, char **argv){// 初始化curl_global_init(CURL_GLOBAL_WIN32);CURLM *multi_handle = NULL;CURL *easy_handle1 = NULL;CURL *easy_handle2 = NULL;extern size_t save_sina_page(void *buffer, size_t size, size_t count, void *user_p);extern size原创 2020-11-03 16:49:50 · 469 阅读 · 0 评论 -
IOCP使用acceptEX进行异步接收
示例代码#include <winsock2.h>#include <windows.h>#include <string>#include <iostream>#include<process.h>#include <ws2tcpip.h>#include <mswsock.h>using namespace std;//#pragma comment(lib,"MSWSOCK.lib")#pragm原创 2020-10-25 18:06:58 · 1280 阅读 · 0 评论 -
iocp接收连接放在主loop里
https://docs.microsoft.com/en-us/windows/win32/api/mswsock/nf-mswsock-acceptex微软示例参考:https://blog.csdn.net/ggz631047367/article/details/45012993// IOCP_TCPIP_Socket_Server.cpp#include <WinSock2.h>#include <Windows.h>#include <vector&原创 2020-10-23 09:35:29 · 107 阅读 · 0 评论 -
ipv4地址结构体
sockaddr_in是保存ipv4地址信息的结构体,那为何还要使用sin_family单独指定地址族信息呢。这与他的抽象父类sockaddr结构体有关,结构体sockaddr并非只为ipv4设计,为了与sockaddr兼容所以添加了sin_family原创 2020-08-26 16:56:46 · 527 阅读 · 0 评论 -
网络编程16 线程池优化
分离线程一个线程的重要属性是可结合的,或者是分离的。一个可结合的线程是能够被其他线程杀死和回收资源的;而一个分离的线程不能被其他线程杀死或回收资源。一般来说,默认的属性是可结合的。我们可以通过调用 pthread_detach 函数可以分离一个线程:int pthread_detach(pthread_t tid)int pthread_detach(pthread_t tid)void ...原创 2019-12-15 23:41:23 · 97 阅读 · 0 评论 -
网络编程16 C10K问题
查看单个进程所能打开的描述符文件数$ulimit -n1024可在下面的文件中修改/etc/sysctl.conffs.file-max = 10000net.ipv4.ip_conntrack_max = 10000net.ipv4.netfilter.ip_conntrack_max = 10000网络连接中接受和发送缓冲区的最小分配值、默认分配值、最大分配值$cat /...原创 2019-12-14 23:44:29 · 89 阅读 · 0 评论 -
网络编程15 epoll的使用
创建epollint epoll_create(int size);int epoll_create1(int flags);返回值: 若成功返回一个大于0的值,表示epoll实例;若返回-1表示出错epoll_create创建一个epoll实例,从linux2.6.8开始,参数size被自动忽略。但是该值仍然需要一个大于零的整数。这个epoll实例用来调用epoll_ctl和epoll...原创 2019-12-14 18:41:42 · 149 阅读 · 0 评论 -
网络编程14 非阻塞IO和多路复用
非阻塞IO在调用诸如read、accept函数的时候不会发生阻塞。使用多路复用监听事件,当事件发生后再调用相关非阻塞函数。这样可以防止事件来临后有突发意外导致程序一直阻塞在阻塞函数处如:客户端发起连接,服务端监听事件起作用,进入if判断接收accept这时客户端中断链接且没有time_wait状态,此时服务端就会一直阻塞在accept函数处。...原创 2019-12-12 17:49:02 · 102 阅读 · 0 评论 -
网络编程13 poll函数
int poll(struct pollfd *fds, unsigned long nfds, int timeout); 返回值:若有就绪描述符则为其数目,若超时则为0,若出错则为-1timeout为毫秒值 该值如果小于零则表示如果无事件发生则等待,等于零表示立即返回,大于零表示等待的毫秒数fds: 为事件数组nfds: 为事件数组长度struct pollfd { ...原创 2019-12-11 23:03:41 · 180 阅读 · 0 评论 -
网络编程12 select多路复用
int select(int maxfd, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);返回:若有就绪描述符则为其数目,若超时则为0,若出错则为-1maxfd 表示的是待测试的描述符基数,它的值是待测试的最大描述符加 1。void FD_ZERO(fd_set ...原创 2019-12-10 23:01:41 · 116 阅读 · 0 评论 -
网络编程11 tcp在不同平台上的差异
所以在建立网络连接的时候,为了防止对端程序突然中断,导致信息发不出去要注册SIGPIPE信号中断原创 2019-12-08 12:22:05 · 128 阅读 · 0 评论 -
网络编程10 重用socket
因为tcp连接的TIME_WAIT时间,所以一个连接断开后不能立即复用。此时可以改变内核的tcp_tw_reuse状态 或者在bind函数之前调用setsockopt函数设置状态示例代码nt main(int argc, char **argv) { int listenfd; listenfd = socket(AF_INET, SOCK_STREAM, 0); ...原创 2019-12-07 21:38:02 · 217 阅读 · 0 评论 -
网络编程9 udp的connect连接
UDP connect函数并不会引起和目标端的网络交互,也就是说并不会发送所谓的“握手”报文的发送和应答UDP connect的主要作用就是让客户端套接字和目标程序绑定,当发送目标有错误返回时(例如icmp报文),让错误报文等够被正确的套接字接收,而不是丢弃掉例如下面的客户端程序启动而不启动服务端,绑定的话,如果对端不可达会返回错误信息并被recvfrom接收,而不会到时在recvfrom哪里...原创 2019-12-07 15:16:25 · 171 阅读 · 0 评论 -
网络编程8 流量控制和拥塞控制
流量控制:流量控制就是在发送端和接收端之间的协调,当发送端发送过多的数据,而接收端来不及接收,为了防止丢包需要调整发送窗口和接收窗口的大小。拥塞控制:拥塞控制就是协调发送者和接收者与网络带宽之间的关系,tcp协议中拥塞控制是通过拥塞控制窗口来实现的,同时为了进一步提高网络带宽的利用率增加了delay ack和nagle算法,前者降低网络中的ack报文数量,后者降低网络中小数据包的报文数量。de...原创 2019-12-07 12:18:43 · 196 阅读 · 0 评论 -
网络编程7 套接字关闭
close 函数int close(int sockfd)close函数会对套接字引用计数减一,一旦发现套接字引用计数到0,就会关闭TCP两个方向的数据流,并彻底释放套接字在输入方向上,系统内核会将套接字设置为不可读,任何读操作都会返回异常在输出方向上,系统内核尝试将发送缓冲区的数据发送给对端,并最后给对端发送一个FIN报文,接下来再对该套接字进行写操作就会返回异常shutdown函...原创 2019-12-05 23:00:07 · 424 阅读 · 0 评论 -
网络编程6 TIME_WAIT状态
1、为了在四次挥手中确保对方收到自己发送的ack。2、为了防止原链接断开后又重新打开一个新的相同的链接(端口、ip、目的ip、目的端口都相同),迷走报文对新的链接产生影响。TIME_WAIT的时间在LINUX下通常是设置为60s。有的系统设置为2MSL。2MSL一般是从主机1接收到FIN后发送ACK开始计时到收到FIN为止的时间TIME_WAIT的危害一、资源占用二、对端口资源的占...原创 2019-12-05 15:55:52 · 219 阅读 · 0 评论 -
网络编程6 书籍推荐
UNIX网络编程 卷一TCP/IP协议 卷一原创 2019-12-05 12:00:20 · 661 阅读 · 0 评论 -
网络编程5 本地套接字
本地套接字是进程间通信的一种方式,除了本地套接字外还有管道、消息队列等原创 2019-12-04 23:01:57 · 137 阅读 · 0 评论 -
网络编程4 udp协议传输
upd收发数据的接口ssize_t recvfrom(int sockfd, void* buff, size_t nbytes, int flags, struct sockaddr* from, socklen_t* addrlen)ssize_t sendto(int sockfd, const void* buff, size_t nbytes, int flags, const s...原创 2019-12-04 21:32:04 · 109 阅读 · 0 评论 -
网络编程3 使用套接字收发数据
发送数据ssize_t write(int sockketfd, const void* buffer, size_t size)ssize_t send(int socketfd, const void* buffer, size_t size, int flags)ssize_t sendmsg(int sockfd, const struct msghdr* msg, int flag...原创 2019-12-04 17:38:53 · 179 阅读 · 0 评论 -
网络变成2 socket接口
套接字根据tcp/ip协议栈分为tcp套接字和udp套接字其中tcp套接字又被称为Stream Socket和Datagram Socket,他们分别被定义为SOCK_STREAM和SOCK_DGRAMint socket(int domain, int type, int protocol)其中domain就是PF_INET、PF_INET6以及PF_LOCAL等协议族类型(与地址族对应...原创 2019-12-04 00:08:14 · 122 阅读 · 0 评论 -
网络编程1 套接字地址sockaddr
1、如何保证服务器端在数据量巨大的客户端访问时依然能维持效率和稳定,这也是高性能网络编程的目的。2、无论是客户端还是服务器端它们运行的单位都是进程(多个客户端连接一个服务器时,服务器是如何开启单个进程进行通信的 比如一个网络包到达服务器,服务器如何处理这个包)3、tcp通信一旦建立数据的传输就不再是单向的,而是双向的,这也是TCP的一个显著特性由下图可知__kernel_sa_family...原创 2019-12-03 23:06:04 · 115 阅读 · 0 评论