Unix Network Programming Episode 82

复制代码
#include "unp.h"
#include <time.h>

int main(int argc, char **argv)
{
    int listenfd, connfd;
    socklen_t len;
    char buff[MAXLINE];
    time_t ticks;
    strct sockaddr_storage clientaddr;

    if(argc==2)
        listenfd=Tcp_listen(NULL,argv[1],&addrlen);
    else if(argc==3)
        listenfd=Tcp_listen(argv[1], argv[2], &addrlen);
    else 
        err_quit("usage: daytimetcpsrv2 [ <host> ] service or port>");
    
    for(;;)
    {
        len=sizeof(clientaddr);
        connfd=Accept(listenfd, (SA *)&clientaddr, &len);
        printf("connection from %s\n", Sock_ntop((SA *)&clientaddr,len));

        ticks=time(NULL);
        snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));
        Write(connfd, buff, strlen(buff));

        Close(connfd);
    }

}

Protocol-independent daytime server that uses tcp_listen

'udp_client' Function

Our functions that provide a simpler interface to getaddrinfo change with UDP because we provide one client function that creates an unconnected UDP socket, and another in the next section that creates a connected UDP socket.

复制代码
#include "unp.h"
int udp_client (const char *hostname, const char *service, struct sockaddr **saptr, socklen_t *lenp);

#include "unp.h"
int udp_client(const char *host, const char *serv, SA *saptr, socklen_t *lenp)
{
    int sockfd, n;
    struct addrinfo, *res, *ressave;

    bzero(&hints, sizeof(struct addrinfo));
    hints.ai_family=AF_UNSPEC;
    hints.ai_socktype=SOCK_DGRAM;
    
    if((n=getaddrinfo(host, serv, &hints, &res))!=0)
        err_quit("udp_client error for %s, %s: %s", host, serv, gai_strerror(n));
    
    ressave=res;

    do
    {
        sockfd=socket(res->ai_family, res->ai_socktype, res->ai_protocol);
        if(sockfd>=0)
            break;
    }while((res=res->ai_next)!=NULL);

    if(res==NULL)
        err_sys("udp_client error for %s, %s", host, serv);
    
    *saptr=Malloc(res->ai_addrlen);
    memcpy(*saptr, res->ai_addr, res->ai_addrlen);
    *lenp=res->ai_addrlen;

    freeaddrinfo(ressave);

    return sockfd;
}

udp_client function: creates an unconnected UDP socket

相关推荐
SZ1701102318 分钟前
IGP(Interior Gateway Protocol,内部网关协议)
运维·服务器·gateway
moxiaoran575317 分钟前
Spring Cloud Gateway 动态路由实现方案
运维·服务器·前端
知之则吱吱25 分钟前
亚马逊云服务器(AWS)会限制用户使用吗?深度解读AWS资源政策
服务器·经验分享
小李飞刀李寻欢1 小时前
使用kubeadm部署Kubernetes(k8s)集群的步骤
linux·服务器·ubuntu·kubernetes·k8s
运维成长记2 小时前
阿里云实践创建实例步骤
linux·运维·服务器·阿里云·云计算
Kusunoki_D2 小时前
Python 实现 Web 静态服务器(HTTP 协议)
服务器·前端·python
THe CHallEnge of THe BrAve2 小时前
Linux检验库是否安装成功
linux·运维·服务器
晓北斗NorSnow3 小时前
没有宝塔面板的服务器上的WordPress网站打包下载到本地?
运维·服务器
希艾席帝恩3 小时前
从传统楼盘到智慧空间:数字孪生的地产赋能之路
大数据·运维·服务器·人工智能·数字孪生·云渲染
曹勖之3 小时前
ROS2 工作空间中, CMakeLists.txt, setup.py和 package.xml的作用分别是?
xml·linux·服务器·ros2