c_cpp Unix的ドメインソケットの确认

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp Unix的ドメインソケットの确认相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <string.h>
#include <netdb.h>

#include <sys/socket.h> 
#include <sys/un.h>
#include <poll.h>
#define UNIXDOMAIN_PATH "/tmp/server.sock"

int main(int argc, char *argv[]){
    int clifd, lsnfd;
    struct sockaddr_un cliaddr, srvaddr;
    struct pollfd fds[1] = {0,};
    int errno = -1;

    lsnfd = socket(AF_UNIX, SOCK_STREAM, 0);
    if(lsnfd < 0){
        fprintf(stderr, "socket error errno[%d]\n", errno);
        exit(-1);
    }

    unlink(UNIXDOMAIN_PATH);
    memset(&srvaddr, 0, sizeof(struct sockaddr_un));
    srvaddr.sun_family = AF_UNIX;
    strcpy(srvaddr.sun_path, UNIXDOMAIN_PATH);
    if(bind(lsnfd, (struct sockaddr *)&srvaddr, sizeof(struct sockaddr_un)) < 0){
        fprintf(stderr, "bind error errno[%d]\n", errno);
        exit(-1);
    }

    if(listen(lsnfd, 5) < 0){
        fprintf(stderr, "listen error errno[%d]\n", errno);
        exit(-1);
    }

    fds[0].fd = lsnfd;
    fds[0].events = POLLIN;

    poll(fds, 1, -1);

    if(fds[0].revents & POLLIN){
        char recvbuf[2048] = "";
        memset(&cliaddr, 0, sizeof(struct sockaddr_un));
        socklen_t addrlen = sizeof(struct sockaddr_un);
        if((clifd = accept(lsnfd, (struct sockaddr *)&cliaddr, &addrlen)) < 0){
            fprintf(stderr, "accept error errno[%d]\n", errno);
            exit(-1);
        }
        int len = read(clifd, recvbuf, sizeof(recvbuf));
        recvbuf[len] = 0;
        fprintf(stdout, "%s\n", recvbuf);
    }else{
        fprintf(stderr, "error errno[%d]\n", errno);
        exit(-1);
    }

    close(clifd);
    close(lsnfd);
    return 0;
}
#include <stdio.h>
#include <string.h>
#include <netdb.h>

#include <sys/socket.h> 
#include <sys/un.h>
#include <poll.h>
#define UNIXDOMAIN_PATH "/tmp/server.sock"

int main(int argc, char *argv[]){
    struct sockaddr_un addr;
    int srvfd;
    int errno = -1;

    srvfd = socket(AF_UNIX, SOCK_STREAM, 0);
    if(srvfd < 0){
        fprintf(stderr, "socket error errno[%d]\n", errno);
        exit(-1);
    }

    memset(&addr, 0, sizeof(struct sockaddr_un));
    addr.sun_family = AF_UNIX;
    strcpy(addr.sun_path, UNIXDOMAIN_PATH);

    if(connect(srvfd, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0){
        fprintf(stderr, "connect error errno[%d]\n", errno);
        exit(-1);
    }

    if(write(srvfd, "hello world", strlen("hello world")) < 0){
        fprintf(stderr, "write error errno[%d]\n", errno);
        exit(-1);
    }

    close(srvfd);

    return 0;
}

以上是关于c_cpp Unix的ドメインソケットの确认的主要内容,如果未能解决你的问题,请参考以下文章

ini nginx的で特定のドメインのみ动作する画像キャッシュサーバ用的conf

text Redmine +チケット+バージョン管理连携#memo

text ダッシュボード:メインカラム系

ruby PCAPファイルを読み込んで,分ごとのTCP / IPパケット数を出力する。

javascript サムネイル画像クリックでメイン画像切り替え

javascript Issue279:20180115 - no60。お店の最新情报をメインカラムに移动