`

UNIX环境高级编程 网络IPC:套接字

 
阅读更多

 

 

相关函数列表

//创建一个套接字
#include <sys/socket.h>
int socket(int domain, int type, int protocol);

//套接字是双向的,采用下面函数来禁止一个套接字的I/O
#include <sys/socket.h>
int shutdown(int sockfd, int how);

//大端和小端,有4个用来在处理器字节序和网络字节序之间实施转换的函数
#include <arpa/inet.h>
uint32_t htonl(uint32_t hostinet32);
uint16_t htons(uint16_t hostint16);
uint32_t ntohl(uint32_t netint32);
uint16_t ntohs(uint16_t netint16);

//地址格式的结构体
struct sockaddr {
    sa_family_t  sa_faily;
    char              sa_data[];
};

//IPv4因特网(AF_INET)中,套接字地址用结构体sockaddr_in表示
struct sockaddr_in {
    sa_family_t  sin_family;
    in_port_t      sin_port;
    struct in_addr   sin_addr;
};

//in_addr结构体
struct in_addr {
    in_addr_t   s_addr;
};




//下面函数用于将二进制地址格式和点分十进制字符表示之间转换
#include <arpa/inet.h>
const char *inet_ntop(int domain, const void *restrict addr,
                   char *restrict str, socklen_t size);
int inet_pton(int domain, const char *restrict str, void *restrict addr);


//通过下面函数可以找到给定计算机系统的主机信息
#include <netdb.h>
struct hostent *gethostent(void);
void sethostent(int stayopen);
void endhostent(void);

//hostent结构体
struct hostent {
    char *h_name;
    char **h_aliases;
    int    h_addrtype;
    int    h_length;
    char **h_addr_list;
};


//能够采用一套相似的接口来获得网络名字和网络编号
#include <netdb.h>
struct netent *getnetbyaddr(uint32_t net, int type);
struct netent *getnetbyname(const char *name);
struct netent *getnetent(void);
void setnetent(int stayopen);
void endnetent(void);

//netent结构体至少包含如下内容
struct netent {
    char  *n_name;
    char  **n_aliases;
    int   n_addrtype;
    uint32_t n_net;
};


//可以用下面函数在协议名字和协议编号之间进行映射
#include <netdb.h>
struct protoent *getprotobyname(const char *name);
struct protoent *getprotobynumber(int proto);
struct protoent *getprotoent(void);
void setprotoent(int stayopen);
void endprotoent(void);

//protoent结构体至少包含如下
struct protoent {
    char  *p_name;
    char  **p_aliases;
    int   p_ptoro;
};


//服务是由地址的端口号部分表示的,可以使用getservbyname将一个服务名映射到一个端口号,下面
//函数将一个端口号映射到一个服务名,并可以扫描查询
#include <netdb.h>
struct servent *getservbyname(const char *name, const char *proto);
struct servent *getservbyport(int port, const char *proto);
struct servent *getservent(void);
void serservent(int stayopen);
void endservent(void);

//servent结构体至少包含如下
struct servent {
    char  *s_name;
    char  **s_aliases;
    int   s_port;
    char  *s_proto;
};



//下面函允许将一个主机名和一个服务名映射到一个地址
#include <sys/socket.h>
#include <netdb.h>
int getaddrinfo(const char *restrict host, const char *restrict service, const struct 
                addrinfo *restrict buf, struct addrinfo **restrict res);
void freeaddrinfo(struct addrinfo *ai);

//addrinfo结构体至少包含以下成员
struct addrinfo {
    int   ai_flags;
    int   ai_family;
    int   ai_socktype;
    int   ai_protocol;
    socklen_t        ai_addrlen;
    struct sockaddr  *ai_addr;
    char             *ai_canonname;
    struct addrinfo  *ai_next;
};

//下面函数将错误码转成错误消息
#include <netdb.h>
const char *gai_strerror(int error);

//将一个地址转换成一个主机名和一个服务名
#include <sys/socket.h>
#include <netdb.h>
int getnameinfo(const struct sockaddr *restrict addr, socklen_t alen, char *restrict host,
                socklen_t hostlen, char *restrict service, socklen_t servlen, int flag);




//下面函数用来关联地址和套接字
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t len);

//下面函数用来发现绑定到套接字上的地址
#include <sys/socket.h>
int getsockname(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp);

//如果套接字已经和对等方连接,下面函数用来找到对方的地址
#include <sys/socket.h>
int getpeername(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict alenp);


//使用下面函数来建立连接
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t len);

//服务器调用下面函数来宣告它愿意接受连接请求
#include <sys/socket.h>
int listen(int sockfd, int backlog);

//一旦服务器调用listen,所用的套接字就能接收连接请求,下面函数获得连接请求并建立连接
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *restrict addr, socklen_t  *restrict len);




//用来发送数据的函数
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t nbytes, int flags, 
              const struct sockaddr *destaddr, socklen_t destlen);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);

//msghdr结构体至少包含如下
struct msghdr {
    void        *msg_name;
    socklen_t   msg_namelen;
    struct iovec *msg_iov;
    int         msg_iovlen;
    void        *msg_control;
    socklen_t   msg_controllen;
    int         msg_flags;
};
            

//用来接收数据的函数
#include <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags);
ssize_t recvfrom(int sockfd, void *restrict buf, size_t len, int flags, 
            struct sockaddr *restrict addr, socklen_t *restrict addrlen);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);




//套接字选项
#include <sys/socket.h>
int setsockop(int sockfd, int level, int option, const void *val, socklen_t len);
int getsockop(int sockfd, int level, int option, void *restrict val, 
              socklen_t *restrict lenp);


//TCP支持紧急标记(urgent mark),为帮助判断是否已经达到紧急标记,可以使用下面函数
#includ <sys/socket.h>
int sockatmark(int sockfd);





 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    UNIX网络编程 卷1:套接字联网API源代码

    《UNIX网络编程 卷1:套接字联网API源代码》是网络编程领域的一本经典著作,主要关注于UNIX系统中的网络通信,特别是基于套接字的编程接口。这本书深入探讨了如何使用套接字API来实现跨网络的通信,为开发者提供了...

    unix网络编程卷1:套接字联网api(第3版)

    《Unix网络编程卷1:套接字联网API(第3版)》是网络编程领域的一本经典著作,由Steven McQuain和W. Richard Stevens共同撰写。这本书详细介绍了Unix系统中的网络编程,尤其是套接字(Sockets)API的使用,是IT专业...

    UNIX网络编程卷1:套接字联网API(第3版)完整书签

    这本书详细介绍了在UNIX操作系统环境下如何使用套接字进行网络通信,是深入理解和实践网络编程的必备参考书籍。如果你对网络编程感兴趣但缺乏基础,建议先学习TCP/IP基础知识以及《Advanced Programming in the UNIX...

    UNIX网络编程卷1:套接字联网API(第3版)程序

    《UNIX网络编程卷1:套接字联网API(第3版)》是网络编程领域的一本经典著作,由W. Richard Stevens和Kurt W. Thompson共同撰写。这本书深入讲解了如何使用UNIX系统上的套接字接口进行网络通信,涵盖了从基本的TCP/...

    UNIX网络编程卷1:套接字联网API(第3版)

    通过阅读《UNIX网络编程卷1:套接字联网API(第3版)》,开发者不仅可以掌握套接字API的基本用法,还能学习到高级网络编程技巧,提升在UNIX/Linux环境下编写网络应用程序的能力。这本书是网络工程师、系统管理员以及...

    UNIX网络编程卷1:套接字联网API(第3版) (豆瓣)

    《UNIX网络编程卷1:套接字联网API(第3版)》是网络编程领域的一本经典著作,由Bill Fenner和Andrew M. Rudoff共同撰写。这本书深入讲解了使用UNIX系统进行网络通信的核心技术——套接字(Sockets)API。在了解这个...

    UNIX网络编程 卷1:套接字联网API(code)

    《UNIX网络编程 卷1:套接字联网API》是一本经典的计算机科学著作,由W. Richard Stevens撰写,深入浅出地介绍了UNIX系统中的网络编程技术,特别是套接字(Socket)API的使用。这本书是许多程序员和系统管理员学习...

    UNIX环境高级编程

    特别对于网络IPC(进程间通信),作者从套接字描述符开始讲起,深入阐述了套接字的寻址、连接、数据传输、套接字选项以及非阻塞和异步I/O等。 书中还单独章节讲解了守护进程的编程规则、高级I/O技术、终端I/O、伪...

    UNIX环境高级编程+UNIX网络编程卷1.PDF版

    《UNIX网络编程卷1:协议》则聚焦于网络通信,涉及TCP/IP协议栈、套接字编程和网络应用层协议。以下是其主要知识点: 1. **网络基础知识**:介绍TCP/IP协议族的基本概念,包括IP、ICMP、TCP、UDP等协议的作用和工作...

    unix环境高级编程&&unix网络编程

    在IT领域,Unix环境高级编程和Unix网络编程是两本非常经典的教材,它们为程序员提供了深入理解操作系统原理和网络通信的基础。这两本书是学习如何在Unix/Linux系统上编写高效、可靠的程序的重要参考资料。 《Unix...

    UNIX网络编程_卷1_套接字联网API第3版源代码

    《UNIX网络编程_卷1_套接字联网API第3版源代码》是网络编程领域的一本经典之作,由著名计算机科学家W. Richard Stevens撰写。这本书深入浅出地讲解了如何在UNIX系统中使用套接字(Sockets)进行网络通信,涵盖了从...

    unix环境高级编程第三版 英文版

    4. **网络编程**:Unix系统支持丰富的网络功能,书中详细阐述了套接字API的使用,包括TCP/IP协议族、UDP协议、套接字选项、并发服务器设计等。这为开发网络应用程序提供了基础。 5. **内存管理**:书中详细介绍了...

    UNIX环境高级编程.pdf

    这一章节进一步深化了进程间通信的内容,包括远程过程调用(RPC)、套接字编程(Socket)等更为复杂的通信方式。 #### 十四、数据库函数库 数据库函数库提供了一种简单高效的方式,用于在UNIX环境下管理数据。这部分...

    unix网络编程和unix环境高级编程.zip

    在这部分,读者将了解到如何利用Unix系统提供的网络编程接口来实现网络应用,如TCP/IP协议栈的工作原理、套接字的创建与操作、数据的发送与接收、多路复用I/O(如select和poll)、异步I/O等核心概念。同时,书中还...

    Unix环境高级编程第三版 English version

    《Unix环境高级编程》将详细介绍基于TCP/IP协议族的套接字编程,包括流套接字和数据报套接字的使用。 6. 系统编程API的使用和标准:书中强调了POSIX标准和其他相关标准的重要性,这些标准定义了如何在Unix系统上...

Global site tag (gtag.js) - Google Analytics