socket、 send、recv、阻塞相关

一、recv和recvfrom的区别
原文链接: http://blog.csdn.net/jiangzhuzhu/article/details/5686517
2015.3.02   2015.8.18
  2387人阅读  评论(0)  收藏  举报

recv不等待是因为你使用的是非阻塞socket,换而你使用阻塞socket一样需要等待。 
recv的recvfrom是可以替换使用的,只是recvfrom多了两个参数,可以用来接收对端的地址信息,这个对于udp这种无连接的,可以很方便地进行回复。而换过来如果你在udp当中也使用recv,那么就不知道该回复给谁了,如果你不需要回复的话,也是可以使用的。另外就是对于tcp是已经知道对端的,就没必要每次接收还多收一个地址,没有意义,要取地址信息,在accept当中取得就可以加以记录了。




socket编程

原文链接: http://blog.csdn.net/jiangzhuzhu/article/details/5687234

 

socket编程

分类: linux   264人阅读  评论(0)  收藏  举报

int socket(int domain,int type,int protocol); 
(1):如果想单独处理TCP,UDP或者ICMP,可用AF_INET, 第三个参数用IPPROTO_TCP, IPPROTO_UDP等 
(2):如果想对各种IP包进行处理,则用AF_PACKET/PF_PACKET,第三个参数用htons(ETH_P_IP) 
(3):如果想处理一切链路层上的包(IP,RARP,ARP等),则用AF_PACKET/PF_PACKET,第三个参数用 htons(ETH_P_ALL)



三、非阻塞socket编程处理EAGAIN

原文链接:http://blog.chinaunix.net/uid-25885064-id-3067050.html

分类: C/C++

      在linux进行非阻塞的socket接收数据时经常出现Resource temporarily unavailable,errno代码为11(EAGAIN),这表明你在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,这个错误不会破坏socket的同步,不用管它,下次循环接着recv就可以。 对非阻塞socket而言,EAGAIN不是一种错误。在VxWorks和Windows上,EAGAIN的名字叫做EWOULDBLOCK。

      另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。

      最后,如果recv的返回值为0,那表明连接已经断开,我们的接收操作也应该结束




四、阻塞 非阻塞 判别

1、非阻塞的设置方法

原文链接:http://blog.sina.com.cn/s/blog_4b029ef30100nxcb.html

int  flag;
flag = fcntl(fd, F_GETFL, 0);
if(0 > flag) .......;
flag |= O_NONBLOCK;
fcntl(fd, F_SETFL, flag);
 

2、判别方法

附下图 说明 是 阻塞 还是非阻塞 问题:



五、






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值