`

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环境高级编程(第2版)书和源码

    第16章 网络IPC:套接字 437 第17章 高级进程间通信 469 第18章 终端I/O 507 第19章 伪终端 541 第20章 数据库函数库 567 第21章 与网络打印机通信 603 附录A 函数原型 647 附录B 其他源代码...

    UNIX环境高级编程

    第16章 网络IPC:套接字 437 16.1 引言 437 16.2 套接字描述符 437 16.3 寻址 439 16.3.1 字节序 440 16.3.2 地址格式 441 16.3.3 地址查询 442 16.3.4 将套接字与地址绑定 449 16.4 建立连接 450...

    UNIX网络编程 英文版

    《UNIX网络编程(卷1):套接字联网API(第3版)》是一部UNIX网络编程的经典之作!书中全面深入地介绍了如何使用套接字API进行网络编程。全书不但介绍了基本编程内容,还涵盖了与套接字编程相关的高级主题,对于客户/...

    UNIX环境高级编程_第二版中文

    第16章 网络IPC:套接字  16.1 引言  16.2 套接字描述符  16.3 寻址  16.3.1 字节序  16.3.2 地址格式  16.3.3 地址查询  16.3.4 将套接字与地址绑定  16.4 建立连接  16.5 数据传输  16.6 套...

    UNIX环境高级编程_第2版.part2

    第16章网络ipc:套接字437 16.1 引言437 16.2 套接字描述符437 16.3 寻址439 16.3.1 字节序440 16.3.2 地址格式441 16.3.3 地址查询442 16.3.4 将套接字与地址绑定449 16.4 建立连接450 16.5 数据传输452 ...

    UNIX环境高级编程(第二版中文)

    第16章 网络IPC:套接字 437 16.1 引言 437 16.2 套接字描述符 437 16.3 寻址 439 16.3.1 字节序 440 16.3.2 地址格式 441 16.3.3 地址查询 442 16.3.4 将套接字与地址绑定 449 16.4 建立连接 450...

    UNIX环境高级编程_第二版中文.pdf

    介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了众多应用实例,是...

    berkeley套接字

    这套应用程序接口也被用于Unix域套接字(Unix domain sockets),后者可以在单机上作为进程间通讯(IPC)频道的接口。 这种基于流的传输层接口(TLI)应用程序接口为套接字应用程序接口提供了一种选择。 不过,最近...

    UNIX环境高级编程_第2版.part1

    第16章网络ipc:套接字437 16.1 引言437 16.2 套接字描述符437 16.3 寻址439 16.3.1 字节序440 16.3.2 地址格式441 16.3.3 地址查询442 16.3.4 将套接字与地址绑定449 16.4 建立连接450 16.5 数据传输452 ...

    unix环境编程电子书

    网络IPC:套接字 437 16.1 引言 437 16.2 套接字描述符 437 16.3 寻址 439 16.3.1 字节序 440 16.3.2 地址格式 441 16.3.3 地址查询 442 16.3.4 将套接字与地址绑定 449 16.4 建立连接 450 16.5 ...

    UNix 网络编程 卷2

    《UNIX网络编程 卷2:进程间通信(英文版·第2版)》从对Posix IPC和System V IPC的内部结构开始讨论,全面深入地介绍了4种IPC形式:消息传递(管道、FIFO、消息队列)、同步(互斥锁、条件变量、读写锁、文件与记录锁、...

    高级UNIX编程 pdf 电子书

    全书共9章,内容包括:基本概念、基本文件I/O、高级文件I/0、终端I/O、进程与线程、基本进程间通信、高级进程间通信、网络技术与套接字,以及信号与定时器等。涉及POSIX、FreeBSD、Solaris、Linux等几大主流系统...

    Linux网络编程 视频 教程

    UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信...

    Linux网络编程

    6.4.3 一个套接字是怎样在网络上传输数据的?......... 143 6.5 套接字的一些基本知识... 144 6.5.1 基本结构............ 144 6.5.2 基本转换函数..... 145 6.6 基本套接字调用........... 147 6.6.1 socket() 函数...

    网络编程课堂笔记

    Unix TCP/IP 分层协议以及基于Linux的socket套接字网络编程学习笔记。

    C++教程网视频:linux网络编程

    UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信...

    UNIX操作系统教程 张红光

    第1章绪论.1 1.1操作系统概述1 1.1.1建立操作系统的目标1 1.1.2操作系统是用户与计算机的接口1 1.1.3操作系统是资源管理器2 1.2UNIX系统的主要特性3 1.3UNIX系统的发展史4 1.4开源软件与UNIX的推广发展6 1.4.1开源...

    C++教程网《Linux网络编程》视频百度云地址

    UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信...

    [免费]2018年C++教程网的linux网络编程视频百度云下载链接.rar

    UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信...

Global site tag (gtag.js) - Google Analytics