文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux下网络收发包之 send recv

linux下网络收发包之 send recv

时间:2010-12-21  来源:fireworks2

从网上摘抄,根据自己的理解整理的
int send( SOCKET s, const char FAR *buf, int len, int flags ); 1 参数 len 大于s的发送缓冲长度(可由setsockopt设置), 返回SOCKET_ERROR; 2 参数 len 小于等于缓冲区长度,发送完正在发送的数据,并查看缓冲区剩余空间大小left   a. len > left,等待协议栈发送数据至 len <= left,后同"b"   b. len <= left,将数据拷贝至套接字的缓冲区,返回实际拷贝的字节数   上述两步中出错都会返回 SOCKET_ERROR
int recv( SOCKET s, char FAR *buf, int len, int flags); 1. recv 先等待s的发送缓冲中的数据被协议传送完毕,出错返回SOCKET_ERROR 2. recv 阻塞到协议把数据接收完毕 3. 把s的接收缓冲中的数据copy到buf中(注意协议接收到的数据可能大于len)
如果使用非阻塞调用,则上述过程中的等待将不存在,而是立即返回相应的状态 要注意send和recv的返回值,可用perror输出错误信息 sendto recvfrom 类似,用于udp
NOTE: 1. recv()返回的大小如果等于 len,那么可能是还有数据未读完

2. 在Unix系统下,如果send/recv在等待协议传送/接收数据时网络断开的话,调用的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载