
socket
文章平均质量分 73
igaozh
这个作者很懒,什么都没留下…
展开
-
linux下socket connect 阻塞方式 阻塞时间控制(转)
同事今天问我,如何在linux下的c代码里面控制connect的阻塞时间。应用的背景是:linux下的c程序有两个目标IP需要connect,如果用阻塞方式,当其中一个IP不能连接的情况下,程序将阻塞在connect函数上。 本来以为用setsockopt修改个什么参数就可以搞定,结果baidu了半天也没有结果。倒是在网上搜到很多这样的解决方案:将connect方式设置为非...原创 2012-09-10 15:34:58 · 264 阅读 · 0 评论 -
listen和accept的套接字描述符有什么用
在阅读创建socketpair时发现不太理解socket中listen和accept函数的功能和差别,看了下面的描述,明白了。 When a SYN arrives from a client, TCP creates a new entry on the incomplete queue and then responds with the second segment of the t...原创 2012-09-10 16:32:48 · 170 阅读 · 0 评论 -
Linux中的EAGAIN含义
在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读。此时程序不会阻塞起来...原创 2012-09-13 11:06:15 · 118 阅读 · 0 评论 -
分片重组与原始套接字
winpcap是对链路层的封装,而链路层是不对IP分片进行排序。TCP传播方式应该是,应用层将数据从应用进程的缓冲区写入套接字发送缓冲区(可用SO_SENBUF设置),TCP分片时从套接字发送缓冲区取得MSS-TCP头数量 [ MSS <=MTU-IP头数量,一般由对方通告,(对方通告可以得到路径MTU,以免在通过路由等网络设备或到达对方主机时再分片)如果对方没有通告则设置为536...原创 2012-09-13 13:42:47 · 334 阅读 · 0 评论 -
epoll在LT和ET模式下的读写方式
ET模型的逻辑:内核的读buffer有内核态主动变化时,内核会通知你, 无需再去mod。写事件是给用户使用的,最开始add之后,内核都不会通知你了,你可以强制写数据(直到EAGAIN或者实际字节数小于 需要写的字节数),当然你可以主动mod OUT,此时如果句柄可以写了(send buffer有空间),内核就通知你。这里内核态主动的意思是:内核从网络接收了数据放入了读buffer(会通知用户...原创 2012-09-13 14:43:12 · 200 阅读 · 0 评论 -
学习使用epoll
epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。 一、epoll的优点支持一个进程打开大数目的socket描述符。IO效率不随FD数目增加而线性下降。 二、epoll的使用epoll有2种工作方式:LT和ET。 LT(level triggered,...原创 2012-09-13 14:46:08 · 77 阅读 · 0 评论 -
再谈应用环境下的TIME_WAIT和CLOSE_WAIT
昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.youkuaiyun.com/shootyou/article/details/6615051里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态。 在服务器的日常维护过程中,会经常用到下面的命令: Plain代码 ...原创 2012-09-13 15:15:31 · 102 阅读 · 0 评论 -
tcp socket的发送与接收缓冲区
tcp socket的发送缓冲区实际上是一个结构体struct sk_buff的队列,我们可以把它称为发送缓冲队列,由结构体struct sock的成员sk_write_queue(struct sk_buf_head)表示。sk_write_queue是一个结构体struct sk_buff_head类型,这是一个struct sk_buff的双向链表,其定义如下: struct ...原创 2012-09-17 14:32:21 · 161 阅读 · 0 评论 -
浅谈TCP/IP网络编程中socket的行为
我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉:1. TCP/IP协议(如连接的建立和终止、重传和确认、滑动窗口和拥塞控制等等)2. Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为。3. 编写Performant, Scalable的服务器程序。包括多线程、IO Multiplexi...原创 2012-09-18 11:11:23 · 76 阅读 · 0 评论