欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

socket常用用法总结

程序员文章站 2022-03-18 09:59:59
1 2阻塞非阻塞返回值read/recvrecv会阻塞着接收数据while 循环读. read result <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况 下认为连接是正常的,继续接收都是 <0:出错,=0:连接关闭,>0接收到数据大小write/sendsend会阻塞着发送数据......

   

socket常用用法总结

 

 

阻塞 非阻塞 返回值
read/recv recv会阻塞着接收数据 while 循环读. read result <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况 下认为连接是正常的,继续接收 都是 <0:出错,=0:连接关闭,>0接收到数据大小
write/send send会阻塞着发送数据 如果暂时无法发送数据会返回,不会阻塞着 send,因此需要循环发送 都是 <0:出错,=0:连接关闭,>0发送数据大小
connect    connect之后不等待,而是异步执行,用select 监听connect accept,connect 在block情况下错误就是错误,在nonblock的错误情况,参见其他的文章。

 

 

 

 

 

 

 

 

 

 

 

3 setsocketopt:      

3.1 linger: 如果socket是被对方用linger为0的形式关掉,也就是直接发RST的方式关闭的时候,recv也会返回错误,错误码是ENOENT (ENOENT)

3.2 阻塞的socket why 设置 timeout?

4  异常

4.1 EINTER ,EAGAIN = EWOULDBLOCK (区分阻塞 or 非阻塞吗?)

EINTER意思是系统在接收的时候因为收到其他中断信号而*返回,不算socket故障,应该继续接收。

4.2  sigpipe :

test-case:  server fail, client write 2 times .P122 <UX network program>

solution: set SIG_IGN

5 socket 缓冲区

5.1  发送大数据

a[1*1024*1024];

while (1)
send (a,...) //大数据1M,要循环发送

因为socket buffer,IO buffer等原因,要循环发送,否则会发生1M数据仅仅发送,接收100多k,其他数据莫名其妙的丢失,可能是被冲掉了 ? 因为socket buffer 太小??

本文地址:https://blog.csdn.net/fdsafwagdagadg6576/article/details/108587897

相关标签: 网络