recv MSG_PEEK
来源:互联网 发布:歼10首飞 知乎 编辑:程序博客网 时间:2024/05/16 08:42
因为不清楚 MSG_PEEK 是否阻塞所以写代码测试。
结论:recv falg 为 MSG_PEEK 时候是阻塞的。
#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netinet/tcp.h>#include <arpa/inet.h>#include <unistd.h>#include <fcntl.h>#include <string.h>#include <netdb.h>#include <errno.h>#include <stdarg.h>#include <stdio.h>#define ANET_OK 0#define ANET_ERR -1#define ANET_ERR_LEN 256#define ANET_CONNECT_NONE 0#define ANET_CONNECT_NONBLOCK 1static void anetSetError(char *err, const char *fmt, ...){ va_list ap; if (!err) return; va_start(ap, fmt); vsnprintf(err, ANET_ERR_LEN, fmt, ap); va_end(ap);}static int anetTcpGenericConnect(char *err, char *addr, int port, int flags){ int s, on = 1; struct sockaddr_in sa; if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) { anetSetError(err, "creating socket: %s\n", strerror(errno)); return -1; } /* Make sure connection-intensive things like the redis benckmark * * will be able to close/open sockets a zillion of times */ setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); sa.sin_family = AF_INET; sa.sin_port = htons(port); if (inet_aton(addr, &sa.sin_addr) == 0) { struct hostent *he; he = gethostbyname(addr); if (he == NULL) { anetSetError(err, "can't resolve: %s\n", addr); close(s); return -1; } memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr)); } if (connect(s, (struct sockaddr*)&sa, sizeof(sa)) == -1) { if (errno == EINPROGRESS && (flags & ANET_CONNECT_NONBLOCK) ) return s; close(s); return -1; } return s;}int main(){ char err[1000] = { 0 }; int fd = anetTcpGenericConnect( err, "127.0.0.1", 8080, ANET_CONNECT_NONBLOCK ); if( fd < 0 ) { printf( "err=%s\n", err ); return -1; } char buf[100] = {0}; int recvByte = recv( fd, buf, 100, MSG_PEEK ); printf( "recvByte=%d,buf=%s\n", recvByte, buf ); return 0;}
0 0
- recv MSG_PEEK
- recv函数的MSG_PEEK标志介绍
- recv函数的MSG_PEEK标志介绍
- MSG_PEEK
- recv函数究竟是在剪切(偷取)还是复制(偷窥)? 由0和MSG_PEEK决定!
- MSG_PEEK标志
- 如何偷窥到socket对应的内核缓冲区中有什么数据? 有多少数据?---利用recv的MSG_PEEK和ioctlsocket的FIONREAD
- MSG_OOB、MSG_PEEK、MSG_DONTROUTE
- recv
- recv()
- recv()
- Recv
- recv
- recv
- recv函数
- sock recv
- python recv
- recv函数
- 白云一片去悠悠,青枫浦上不胜愁。谁家今夜扁舟子?何处相思明月楼
- 人生代代无穷已,江月年年只相似。不知江月待何人,但见长江送流水。
- 春江潮水连海平,海上明月共潮生。滟滟随波千万里,何处春江无月明?
- linux下线程
- ubuntu 14.04下hosts 失效-清理dns缓存
- recv MSG_PEEK
- android源码下载
- 历史有三种不同的任务,我们可以称为科学的、想象的或推测的和文学的。
- POJ 3673 解题报告
- Vimium 的使用简单介绍
- 黑马程序员_java语言_GUI
- 二维码扫描极速版2.0.apk
- make menuconfig 出现[scripts/kconfig/dochecklxdialog] Error 1
- drivers/video/console/vgacon.c:486: error: 'PCIMEM_BASE' undeclared