linux c 下的 tcp的recv函数和udp的recvfrom函数 参数对比

原创 2015年11月17日 16:17:08
recv()是编程语言函数。
函数原型int recv( _In_ SOCKET s, _Out_ char *buf, _In_ int len, _In_ int flags);
(1)recv先等待s的发送缓冲中的数据被协议传送完毕,如果协议在传送s的发送缓冲中的数据时出现网络错误,那么recv函数返回SOCKET_ERROR;
(2)如果s的发送缓冲中没有数据或者数据被协议成功发送完毕后,recv先检查套接字s的接收缓冲区,如果s接收缓冲区中没有数据或者协议正在接收数据,那么recv就一直等待,直到协议把数据接收完毕。当协议把数据接收完毕,recv函数就把s的接收缓冲中的数据copy到buf中(注意协议接收到的数据可能大于buf的长度,所以在这种情况下要调用几次recv函数才能把s的接收缓冲中的数据copy完。recv函数仅仅是copy数据,真正的接收数据是协议来完成的);
recv函数返回其实际copy的字节数。如果recv在copy时出错,那么它返回SOCKET_ERROR;如果recv函数在等待协议接收数据时网络中断了,那么它返回0。
注意:在Unix系统下,如果recv函数在等待协议接收数据时网络断开了,那么调用recv的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止。
  recvfrom函数(经socket接收数据):
函数原型:int recvfrom(SOCKET s,void *buf,int len,unsigned int flags, struct sockaddr *from,int *fromlen);
相关函数 recv,recvmsg,send,sendto,socket
函数说明:recv()用来接收远程主机经指定的socket传来的数据,并把数据传到由参数buf指向的内存空间,参数len为可接收数据的最大长度.参数flags一般设0,其他数值定义参考recv().参数from用来指定欲传送的网络地址,结构sockaddr请参考bind()函数.参数fromlen为sockaddr的结构长度.


openssl指定证书密码建立连接

下面是server 和client 的代码。用没跑过,但是用类似的代码跑了。流程是这样的。要注意的是openssl中ssl连接建立前用阻塞的socket,建立后可以设置非阻塞。openssl每个操作后...

在OpenSSL中添加自定义加密算法

在OpenSSL中添加自定义加密算法 1.加密算法的加载... 12.密码算法接口的定义... 43.示例... 8 1.加密算法的加载在调用加密算法之前,通过调用OpenSSL_add_all_al...

linux c学习笔记----UDP基础客户/服务编程(sendto,recvfrom)

原帖:http://lobert.iteye.com/blog/1769618 sendto(经socket传送数据) 相关函数 send , sendmsg,rec...

linux c学习笔记----UDP基础客户/服务编程(sendto,recvfrom)

sendto(经socket传送数据) 相关函数 send , sendmsg,recv , recvfrom , socket 表头文件 #include #incl...

Linux系统调用-- recv/recvfrom/recvmsg函数详解

转自:http://club.cn.yahoo.com/bbs/threadview/1200062866_65__pn.html  功能描述:  从套接字上接收一个消息。对于...

基于UDP的C/S网络编程模型(使用sendto和recvfrom函数)

服务端: #include #include #include #include #include #include //#define CONFIG_TCP_CONNECT #d...
  • zh1074
  • zh1074
  • 2017年09月11日 15:13
  • 84

Linux C函数库参数手册(PDF)

  • 2013年11月20日 10:01
  • 4.76MB
  • 下载

【Linux C代码分享二】UDP Socket示例程序:使用fgets函数获取屏幕输入

前一篇文章的UDP Socket示例程序的Client是循环发送固定的一句话,有时候我们希望像聊天软件一样可以自己输入数据。读取屏幕字符串可以使用gets函数和fgets函数,然而因为安全方面的因素,...

是tcp和udp只和套接字类型有关,和send,recv,connect无关,这些都是协议无关的函数

send函数 int send( SOCKET s,    const char FAR *buf,    int len,    int flags );  不论是客户还是服务器应用程序...

linux网络协议栈(六)传输层 (3)UDP协议 4)报文接收 recv/recvfrom/recvmsg

6.2.2.2.5、报文接收: recv/recvfrom/recvmsg和send族系统调用的道理是一样的,如下图: sock_recvmsg函数最终调用套接字类型ops的recvm...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux c 下的 tcp的recv函数和udp的recvfrom函数 参数对比
举报原因:
原因补充:

(最多只允许输入30个字)