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.

相关推荐
羌俊恩3 分钟前
视频服务器:GB28181网络视频协议
服务器·网络·音视频
运维小白。。27 分钟前
Nginx 反向代理
运维·服务器·nginx·http
科技互联人生34 分钟前
中国数据中心服务器CPU行业发展概述
服务器·硬件架构
KookeeyLena52 小时前
云手机可以挂在服务器使用吗?
运维·服务器·智能手机
老汉忒cpp2 小时前
手动部署并测试内网穿透(ssh 和 nginx)
运维·服务器
有时间要学习2 小时前
Linux——应用层自定义协议与序列化
linux·服务器·网络
hardStudy_h2 小时前
Linux——常用系统设置和快捷键操作指令
linux·运维·服务器
我叫啥都行3 小时前
计算机基础知识复习9.7
运维·服务器·网络·笔记·后端
qq 1778036224 小时前
智能新时代,游戏盾守护顺畅体验
运维·服务器·网络·游戏·云计算·ddos·ip
神秘的土鸡5 小时前
Linux中使用Docker容器构建Tomcat容器完整教程
linux·运维·服务器·docker·容器·tomcat