Chinaunix首页 | 论坛 | 博客
  • 博客访问: 229970
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 407
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-27 13:42
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(18)

2014年(22)

我的朋友

分类: LINUX

2014-07-21 20:20:40

    套接字的默认状态是阻塞的,如果发出一个不能立即完成的套接字调用时,其进程将会被投入睡眠,等待响应的操作完成。可能阻塞的套接字调用:
    (1)输入操作,包括read、readv、recv、recvfrom和recvmsg共5个函数。如果某个进程对一个阻塞的TCP套接字(默认设置)调用这些函数,且接收缓冲区没有数据可读,该进程将被投入睡眠,直到有一些数据到达。
    (2)输出操作,包括write、writev、send、sendto和sendmsg共5个函数。如果某个进程对一个阻塞的TCP套接字(默认设置)调用这些函数,且发送缓冲区没有空间可写,该进程将被投入睡眠,直到有一些空间空闲。   
    (3)accept函数
    (4)connect函 数,如果对一个非阻塞的TCP套接字调用connect,并且连接不能立即建立,那么连接照样能发起,但会返回一个EINPROCESS错误。可以立即建 立连接的情况通常是服务器和客户处于同一个主机下,因此,即使对于一个非阻塞的connect,也得预备connect成功返回的情况发生。

    reactor模式下的所有连接必须是非阻塞的。
    与后台服务器之间的连接需要在应用层判活,因为如果对端主机突然宕机是不会发送任何消息的。
------------
socket的创建
    int sockfd = ::socket(AF_INET,SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, IPPROTO_TCP);

阅读(1430) | 评论(0) | 转发(0) |
0

上一篇:HAproxy健康检测机制

下一篇:nginx主体流程

给主人留下些什么吧!~~