第14章 高级I/O函数

来源:互联网 发布:drugbank数据库 编辑:程序博客网 时间:2024/06/05 14:08
设置套接字时间限制:
1、使用alarm函数和SIGALRM信号
2、使用由select提供的时间限制

3、使用SO_RCVTIMEO和SO_SNDTIMEO套接字选项

#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd, const void *buf, size_t count);

#include<sys/uio.h>struct iovec{void* iov_base;size_t iov_len;};ssize_t readv(int filedes, const struct iovec* iov, int iovcnt);ssize_t writev(int filedes, const struct iovec* iov, int iovcnt);

#include <sys/types.h>#include <sys/socket.h>ssize_t recv(int sockfd, void *buf, size_t len, int flags);ssize_t send(int sockfd, const void *buf, size_t len, int flags);ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,                struct sockaddr *src_addr, socklen_t *addrlen);ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,                const struct sockaddr *dest_addr, socklen_t addrlen);struct msghdr{   void      *msg_name;       /* optional address */   socklen_t   msg_namelen;    /* size of address */   struct iovec  *msg_iov;        /* scatter/gather array */   size_t     msg_iovlen;     /* # elements in msg_iov */   void      *msg_control;    /* ancillary data, see below */   size_t     msg_controllen; /* ancillary data buffer len */   int      msg_flags;      /* flags on received message */};ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);struct cmsghdr {    socklen_t cmsg_len;    /* data byte count, including header */    int       cmsg_level;  /* originating protocol */    int       cmsg_type;   /* protocol-specific type */    /* followed by unsigned char cmsg_data[]; */};struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *msgh);struct cmsghdr *CMSG_NXTHDR(struct msghdr *msgh, struct cmsghdr *cmsg);size_t CMSG_ALIGN(size_t length);size_t CMSG_SPACE(size_t length);size_t CMSG_LEN(size_t length);unsigned char *CMSG_DATA(struct cmsghdr *cmsg);


原创粉丝点击