网络编程函数

新型网路地址转化函数inet_pton和inet_ntop

这两个函数是随IPv6出现的函数,对于IPv4地址和IPv6地址都适用,函数中p和n分别代表表达(presentation)和数值(numeric)。地址的表达格式通常是ASCII字符串,数值格式则是存放到套接字地址结构的二进制值。


#include <arpe/inet.h>
int inet_pton(int family, const char *strptr, void *addrptr);     //将点分十进制的ip地址转化为用于网络传输的数值格式
        返回值:若成功则为1,若输入不是有效的表达式则为0,若出错则为-1
 
const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len);     //将数值格式转化为点分十进制的ip地址格式

注:(1)这两个函数的family参数既可以是AF_INET(ipv4)也可以是AF_INET6(ipv6)。如果,以不被支持的地址族作为family参数,这两个函数都返回一个错误,并将errno置为EAFNOSUPPORT.
(2)第一个函数尝试转换由strptr指针所指向的字符串,并通过addrptr指针存放二进制结果,若成功则返回值为1,否则如果所指定的family而言输入字符串不是有效的表达式格式,那么返回值为0.

(3)inet_ntop进行相反的转换,从数值格式(addrptr)转换到表达式(strptr)。inet_ntop函数的strptr参数不可以是一个空指针。调用者必须为目标存储单元分配内存并指定其大小,调用成功时,这个指针就是该函数的返回值。len参数是目标存储单元的大小,以免该函数溢出其调用者的缓冲区。如果len太小,不足以容纳表达式结果,那么返回一个空指针,并置为errno为ENOSPC。
参考链接

exec函数详解

exec函数
exec函数详解

I/O复用

i/0复用

I/O模型

本地和外地协议地址函数getsockname/getpeername

#include <sys/socket.h>
int getsockname (int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);
int getpeername (int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen);

  • 1.在一个没有调用bind的TCP客户端上,connect成功返回后,getsockname用于返回由内核赋予该连接的本地IP地址和本地端口号;
  • 2.在以端口号0调用bind后,getsockname用于返回由内核赋予的本地端口号;
  • 3.getsockname可用于获取某个套接字的地址族。
  • 4.当一个服务器是由调用过accept的某个进程通过调用exec执行程序时,它能够获取客户身份的唯一途径便是调用getpeername。

/* 代码演示:获取套接字的地址族 */
int sockfd_to_family(int sockfd)
{
	struct sockaddr_storage ss;
	socklen_t	len;
 
	len = sizeof(ss);
	if (getsockname(sockfd, (SA *) &ss, &len) < 0)
		return(-1);
	return(ss.ss_family);
}

getsockopt/setsockopt函数

函数功能:setsockopt()函数,用于任意类型、任意状态套接口的设置。

头文件:#include <sys/socket.h>

int setsockopt ( int SOCKETs,              * 套接字 */

                 int level ,                     /* 选项级别 */

                int optname ,               /* 选项级别 */

                const char * optval ,    /* 目标选项的值 */

                int optlen );                   /* 目标选项的值 */

参数说明:

第一个参数sockfd是套接字描述符。

第二个参数level是被设置的选项的级别。

level指定控制套接字的层次.可以取三种值:

  1. SOL_SOCKET:通用套接字选项.
  2. IPPROTO_IP:IP选项.
  3. IPPROTO_TCP:TCP选项.

如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。

第三个参数optname指定准备设置的选项。

optname可以有哪些取值,这取决于level

第四个参数optval是指针,指向存放选项值的缓冲区

第五个参数optlen指定存放选项值的缓冲区的长度

获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。
在这里插入图片描述
函数用法的例子

信号集处理函数(sigset_t数据类型、sigemptyset、sigfillset、sigaddset、sigismember)

  • 信号集类型
    1.概念:一种类型,能够保存多个信号
    2.类型:sigset_t
    为什么这样设计??
    信号种类数目可能超过一个整型量所包含的位数,所以一般而言,不能用整型量中的一位代表一种信号。POSIX.1定义数据类型sigset_t以包含一个信号集,并且定义了下列五个处理信号集的函数
    定义如下:
    在这里插入图片描述
  • 处理函数

#include <signal.h>
 
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signo);
int sigdelset(sigset_t *set, int signo);
//这4和函数的返回值:成功返回0;出错返回-1
 
int sigismember(const sigset_t *set, int signo);
sigemptyset(sigset_t *set);  //清空set信号集中的所有信号
sigfillset(sigset_t *set);  //将所有的信号赋给set信号集
sigaddset(sigset_t *set, int signo);  //将signo信号加入到set信号集中
sigdelset(sigset_t *set, int signo);  //将set信号集中的signo信号移除
sigismember(const sigset_t *set, int signo);  //判断signo信号是否在set信号集中

参考链接

dup和dup2函数解析

dup函数

getenv、putenv和setenv函数详解

getenv、putenv、setenv设置环境变量函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值