当前位置: 首页 > news >正文

做网站的技术门槛高吗南海网官网

做网站的技术门槛高吗,南海网官网,怎样制作一个自己的网站,免费发布信息有哪些网站目录 recvmsg 函数 函数原型 参数说明 返回值 sendmsg 函数 函数原型 参数说明 返回值 示例代码 recvmsg 和 sendmsg 是在 linux网络编程中用于通用数据读写的函数,它们提供了比传统的 recv 和 send 函数更强大、灵活的功能,特别是在处理复杂的…

  

目录

recvmsg 函数

函数原型

参数说明

返回值

sendmsg 函数

函数原型

参数说明

返回值

示例代码


recvmsg 和 sendmsg 是在 linux网络编程中用于通用数据读写的函数,它们提供了比传统的 recv 和 send 函数更强大、灵活的功能,特别是在处理复杂的套接字地址结构、控制消息和辅助数据时。

recvmsg 函数

函数原型

#include <sys/socket.h>ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);

参数说明

  • sockfd:套接字描述符,标识接收数据的套接字。
  • msg:指向 struct msghdr 结构体的指针,该结构体包含了接收数据的详细信息,包括数据缓冲区、地址信息、控制消息等。struct msghdr 的定义通常如下:其中关于struct iovec结构体以及相关知识,请大家先看:高级IO函数之readv和writev-CSDN博客
struct msghdr {void         *msg_name;       /* 指向套接字地址结构的指针 */socklen_t     msg_namelen;    /* 套接字地址结构的长度 */struct iovec *msg_iov;        /* 指向iovec结构体数组的指针 */int           msg_iovlen;     /* iovec结构体数组的元素个数 */void         *msg_control;    /* 指向控制消息缓冲区的指针 */socklen_t     msg_controllen; /* 控制消息缓冲区的长度 */int           msg_flags;      /* 接收消息的标志 */
};
  • flags:接收数据时的标志位,可以是 0 或以下一个或多个标志的按位或:
    • MSG_DONTWAIT:设置为非阻塞接收,若没有数据可接收,函数立即返回,而不是阻塞等待。
    • MSG_PEEK:查看数据,数据被复制到用户缓冲区,但保留在套接字接收队列中,下次接收操作仍可获取相同的数据。
    • MSG_WAITALL:等待直到请求的字节数全部被接收,除非发生错误、接收到信号或连接被关闭。

返回值

        成功时,返回接收到的字节数。如果连接被关闭,返回 0。出错时,返回 -1,并设置 errno 以指示错误原因,如 EAGAIN(非阻塞模式下无数据可读)、EBADF(无效的文件描述符)等。

sendmsg 函数

函数原型

#include <sys/socket.h>ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);

参数说明

  • sockfd:套接字描述符,标识发送数据的套接字。
  • msg:指向 struct msghdr 结构体的指针,与 recvmsg 中的 msg 结构体类似,但用于指定发送数据的相关信息,如数据缓冲区、目标地址、控制消息等。
  • flags:发送数据时的标志位,常见的标志包括:
    • MSG_DONTWAIT:设置为非阻塞发送,若套接字缓冲区没有足够空间,函数立即返回,而不是阻塞等待。
    • MSG_NOSIGNAL:在面向连接的套接字(如 TCP)上发送数据时,如果连接已断开,不产生 SIGPIPE 信号,而是返回 -1 并设置 errno 为 EPIPE

返回值

        成功时,返回发送的字节数。出错时,返回 -1,并设置 errno 以指示错误原因,如 EAGAIN(非阻塞模式下套接字缓冲区满)、EBADF(无效的文件描述符)等。

示例代码

        大家可以类比udp服务器的逻辑去看。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int sockfd;struct sockaddr_in servaddr, cliaddr;// 创建套接字sockfd = socket(AF_INET, SOCK_DUDP, 0);if (sockfd < 0) {perror("socket creation failed");exit(EXIT_FAILURE);}memset(&servaddr, 0, sizeof(servaddr));memset(&cliaddr, 0, sizeof(cliaddr));// 填充服务器地址结构servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = INADDR_ANY;servaddr.sin_port = htons(PORT);// 绑定套接字到指定地址和端口if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {perror("bind failed");close(sockfd);exit(EXIT_FAILURE);}char buffer[BUFFER_SIZE];struct msghdr send_msg, recv_msg;struct iovec iov_send, iov_recv;socklen_t len = sizeof(cliaddr);// 初始化接收消息iov_recv.iov_base = buffer;iov_recv.iov_len = BUFFER_SIZE;recv_msg.msg_name = (void *)&cliaddr;recv_msg.msg_namelen = sizeof(cliaddr);recv_msg.msg_iov = &iov_recv;recv_msg.msg_iovlen = 1;recv_msg.msg_control = NULL;recv_msg.msg_controllen = 0;recv_msg.msg_flags = 0;// 接收消息ssize_t recv_bytes = recvmsg(sockfd, &recv_msg, 0);if (recv_bytes < 0) {perror("recvmsg failed");close(sockfd);exit(EXIT_FAILURE);}buffer[recv_bytes] = '\0';printf("Received: %s\n", buffer);// 初始化发送消息iov_send.iov_base = "Message received successfully";iov_send.iov_len = strlen("Message received successfully");send_msg.msg_name = (void *)&cliaddr;send_msg.msg_namelen = len;send_msg.msg_iov = &iov_send;send_msg.msg_iovlen = 1;send_msg.msg_control = NULL;send_msg.msg_controllen = 0;send_msg.msg_flags = 0;// 发送消息ssize_t send_bytes = sendmsg(sockfd, &send_msg, 0);if (send_bytes < 0) {perror("sendmsg failed");close(sockfd);exit(EXIT_FAILURE);}printf("Sent %zd bytes\n", send_bytes);close(sockfd);return 0;
}
http://www.yayakq.cn/news/534658/

相关文章:

  • 建设网站如何索要素材怎么请专业拓客团队
  • 服务器租用网站模版wordpress菜单导航代码
  • 哈尔滨+做网站公司有哪些网站建设资料清单
  • 上海定制网站建设推广做网站怎样申请动态域名
  • 安徽湖滨建设集团网站wordpress搬家插件
  • 如何制作单页网站门户网站盈利模式
  • 凡科建站可以做几个网站做外贸一般用什么网站
  • 外贸网站如何做免费推广企业安全文化的建设方案
  • 深圳网站建设单位彭水网站建设
  • 做网站域名解析网站尾部设计
  • 艺麟盛世可以做网站推广吗如何在百度发布广告信息
  • 时事新闻最新消息百度关键词优化工具是什么
  • 小程序开发商有哪些河南网站优化外包服务
  • 网站推广公司招聘短网址生成原理
  • 昌乐网站设计加速器怎么加速网页
  • 瑞安微网站建设社保网站是每月1-6号都是在建设中的吗
  • 建站服务论坛wordpress 表格小工具
  • 广安网站建设服务网站建设几大技巧
  • 数码产品网站模板做网站的公司主要是干啥
  • 网站建设有哪些关键细节手机网站什么技术开发
  • 广州高端企业网站建设湛江seo推广公司
  • 怎样做企业网站又拍云存储WordPress
  • 宁波网站开发定制用户体验地图用什么软件画
  • 域名注册好了怎么了做网站做网站赚钱
  • 比较漂亮的营销型网站企业管理培训课程简介
  • 同城同镇网站建设seo快速排名网站优化
  • 设计坞在线海报制作宁波网站优化公司
  • 玉溪市网站建设推广wordpress调用搜索功能
  • 南宁专业网站建设网站域名 空间
  • 网站整站开发教程网站推广软件app