Unix Network Programming Episode 75

Controlling Termination

复制代码
for(;;)
{
    len=sizeof(struct sockaddr_in);
    rd_sz=Sctp_recvmsg(sock_fd, readbuf, sizeof(readbuf), (SA *)&cliaddr, &len, &sri, &msg_flags);
    if(stream_increment){
        sri.sinfo_stream++;
        if(sri.sinfo_stream>=sctp_get_no_strms(sock_fd,(SA *)&cliaddr, len))
        sri.sinfo_stream=0;
    }
    Sctp_sendmsg(sock_fd, readbuf, rd_sz,(SA *)&cliaddr, len, sri.sinfo_ppid, (sri.sinfo_flags|MSG_EOF), sri.sinfo_stream,0,0);
}

The server terminates an association on reply

复制代码
if(echo_to_all==0)
    sctpstr_client(stdin,sock_fd, (SA *)&servaddr, sizoef(seraddr));
else
    sctpstr_client_echoall(stdin,sock_fd, (SA *)&servaddr, sizeof(servaddr));
strcpy(byemsg,"goodbye");
Sctp_sendmsg(sock_fd, byemsg, strlen(byemsg), (SA *)&servaddr, sizeof(servaddr),0,MSG_ABORT,0,0,0);
Close(sock_fd);

The client aborts the association before closing

Name and Address Conversions

Introduction

All the examples so far in this text have used numeric addresses for the hosts (e.g., 206.6.226.33) and numeric port numbers to identify the servers (e.g., port 13 for the standard daytime server and port 9877 for our echo server). We should, however, use names instead of numbers for numerous reasons: Names are easier to remember; the numeric address can change but the name can remain the same; and with the move to IPv6, numeric addresses become much longer, making it much more error-prone to enter an address by hand.

Domain Name System (DNS)

The DNS is used primarily to map between hostnames and IP addresses. A hostname can be either a simple name, such as solaris or freebsd, or a fully qualified domain name '(FQDN), such as solaris.unpbook.com.

Technically, an FQDN is also called an absolute name and must end with a period, but users often omit the ending period. The trailing period tells the resolver that this name is fully qualified and it doesn't need to search its list of possible domains.

In this section, we will cover only the basics of the DNS that we need for network programming.

'gethostbyname' Function

Host computers are normally known by human-readable names. All the examples that we have shown so far in this book have intentionally used IP addresses instead of names, so we know exactly what goes into the socket address structures for functions such as connect and sendto, and what is returned by functions such as accept and recvfrom. But, most applications should deal with names, not addresses. This is especially true as we move to IPv6, since IPv6 addresses (hex strings) are much longer than IPv4 dotted-decimal numbers. (The example AAAA record and ip6.arpa PTR record in the previous section should make this obvious.)

The most basic function that looks up a hostname is gethostbyname. If successful, it returns a pointer to a hostent structure that contains all the IPv4 addresses for the host. However, it is limited in that it can only return IPv4 addresses.

相关推荐
2301_7807896615 小时前
DDoS 攻击溯源:DNS 水印标记 + 区块链存证的双保险
运维·服务器·网络·云原生·ddos
我命由我1234520 小时前
匈牙利命名法
java·服务器·后端·学习·java-ee·kotlin·学习方法
小田的博客20 小时前
SAP MM 供应商银行主数据更新报错!message R1228!
android·java·服务器
牢姐与蒯20 小时前
Linux基本指令及知识点(二)
linux·运维·服务器
去伪存真202520 小时前
数字样机、态势推演与3D汇报场景下的平台选型对比
运维·服务器
RisunJan21 小时前
Linux命令-spell(Unix 拼写检查工具 —— 文本校对的基础利器)
linux·运维·unix
Richard.Wong1 天前
Windows IIS 服务器部署 Vue3 前端项目详细流程
服务器·前端·windows
Nemo_XP1 天前
C# gridlookupedit选中内容重复还原操作
服务器·前端·c#
我不满意1 天前
在windows服务器上安装oracle 11g,怎么配置后,默认安装的监听地址是内网IP,而不是127.0.0.1
运维·服务器
tedcloud1231 天前
Kimi-K3 部署指南:大模型应用开发环境搭建实践
linux·运维·服务器·开源·音视频