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

相关推荐

  1. 7-82 快速排序

    2023-12-06 06:48:03       30 阅读
  2. Unix Network Programming Episode 82

    2023-12-06 06:48:03       58 阅读
  3. centos7 安装php82

    2023-12-06 06:48:03       41 阅读
  4. MySQL商城数据表(80-88

    2023-12-06 06:48:03       32 阅读
  5. MySQL商城数据表(80-84

    2023-12-06 06:48:03       32 阅读
  6. 商城数据库88张表练习85~88

    2023-12-06 06:48:03       39 阅读
  7. 82. Remove Duplicates from Sorted List II

    2023-12-06 06:48:03       71 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 06:48:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 06:48:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 06:48:03       82 阅读
  4. Python语言-面向对象

    2023-12-06 06:48:03       91 阅读

热门阅读

  1. Unix Network Programming Episode 83

    2023-12-06 06:48:03       59 阅读
  2. 西南科技大学C++程序设计实验四(类与对象三)

    2023-12-06 06:48:03       59 阅读
  3. 透明度值和注意点

    2023-12-06 06:48:03       45 阅读
  4. 编程思想/oop设计模式

    2023-12-06 06:48:03       54 阅读
  5. Android Studio的代码笔记--IntentService学习

    2023-12-06 06:48:03       61 阅读
  6. .Net Core 单元测试获取配置文件节点值

    2023-12-06 06:48:03       40 阅读
  7. SQL int(1) 和 int (10)的区别

    2023-12-06 06:48:03       51 阅读