Chinaunix首页 | 论坛 | 博客
  • 博客访问: 301085
  • 博文数量: 134
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 118
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-01 14:02
文章分类

全部博文(134)

文章存档

2015年(2)

2014年(4)

2013年(128)

分类: C/C++

2013-11-12 18:15:33

原文地址:TCP socket编程要点 作者:丫叩酱

1. 套接字只有处于ESTABLISHED状态,才可以进行数据收发

    >client
调用connect()成功之后,进入ESTABLISHED状态
    >server
调用accept()成功后得到的新的描述符,已处于ESTABLISHED状态

2.
数据的收发必须检查返回值

    >
发送时,数据可能一次发送不完,要循环多次,直到数据全部发送完毕
    >
接收时,可能需要循环来确保接收到了期望长度的数据

3.
连接断开的检查

    >
在写数据时,需捕获SIGPIPE信号来检测连接的对方关闭了读端,此时write()/send()调用返回-1errno设置为EPIPE
    >
在读书据时,若read()/recv()返回0表示连接的对方关闭了连接


4.
哪端主动断开?

    >
一般来说,server应控制断开的主动权,否则server会造成DOS(拒绝服务攻击)

5.
解决2MSL问题?

    >server
需设置SO_REUSEADDR选项,来解决2MSL问题
     (Linux
不支持SO_REUSEPORT,但其他系统可能需设置该选项)

6.
保持连接问题?


    >
可以设置SO_KEEPALIVE选项来保持连接,最好应用程序自己做keep alive,这样更稳妥
     

 

阅读(610) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~